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..50f12792d6 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@658a901452bb54c799643e060733b7afe9121b8d # pin@v4.14.0 # 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@658a901452bb54c799643e060733b7afe9121b8d # pin@v4.14.0 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 @@ -795,7 +795,7 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # pin@v3 + uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # pin@v3 with: sarif_file: results.sarif category: zizmor 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..8be962c18b 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 @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 + uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 with: sarif_file: 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/CHANGELOG.md b/CHANGELOG.md index 74c25341c4..6988a362c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- [#11853](https://github.com/inventree/InvenTree/pull/11853) adds BOM comparison functionality, allowing users to compare the BOM of one assembly with another assembly. +- [#11809](https://github.com/inventree/InvenTree/pull/11809) adds multi-level subassembly display mode to the BOM table, allowing users to view multiple levels of subassemblies in a single table view. This is an optional display mode which can be toggled on or off by the user. +- [#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 +- [#11788](https://github.com/inventree/InvenTree/pull/11788) adds support for custom permissions checks on database models defined in plugins. If a model defines a `check_user_permission` classmethod, this will be called to determine if a user has permission to view the model. This is required for plugin models which do not have the required ruleset definitions for the standard permission system. + ### Changed +- [#11825](https://github.com/inventree/InvenTree/pull/11825) adds a new "bom" ruleset and associated permissions for BOM management, separate from the "part" ruleset which remains focused on part management. This allows for more granular control over user permissions, allowing users to have different levels of access to part management and BOM management functionality. +- [#11816](https://github.com/inventree/InvenTree/pull/11816) makes the `issued_by` field on the `Build` API read only, and instead sets the `issued_by` field to the current user when a build is created. This change was made to ensure that the `issued_by` field accurately reflects the user who created the build, and to prevent users from setting this field to an arbitrary value when creating or updating a build. + ### Removed ## 1.3.0 - 2026-04-11 diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index 2cdb3b187f..bd0064b7d8 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -23,9 +23,9 @@ gunicorn==25.3.0 \ # 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 @@ -53,9 +53,9 @@ mysqlclient==2.2.8 \ --hash=sha256:9bed7c8d3b629bdc09e17fb628d5b3b0a5fd1f12b09432b464b9126c727bedc0 \ --hash=sha256:a81f5e12f8d05439709cb02fba97f9f76d1a6c528164f2260d8798fec969e300 # via -r contrib/container/requirements.in -packaging==26.0 \ - --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ - --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 +packaging==26.1 \ + --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ + --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de # via # -c src/backend/requirements.txt # gunicorn @@ -236,26 +236,26 @@ typing-extensions==4.15.0 \ # via # -c src/backend/requirements.txt # psycopg-pool -uv==0.10.12 \ - --hash=sha256:006812a086fce03d230fc987299f7295c7a73d17a1f1c17de1d1f327826f8481 \ - --hash=sha256:101481a1f48db6becf219914a591a588c0b3bfd05bef90768a5d04972bd6455e \ - --hash=sha256:2ace05115bd9ee1b30d341728257fe051817c4c0a652c085c90d4bd4fb0bc8f2 \ - --hash=sha256:2bb5893d79179727253e4a283871a693d7773c662a534fb897aa65496aa35765 \ - --hash=sha256:2c21e1b36c384f75dd3fd4a818b04871158ce115efff0bb4fdcd18ba2df7bd48 \ - --hash=sha256:2c5dfc7560453186e911c8c2e4ce95cd1c91e1c5926c3b34c5a825a307217be9 \ - --hash=sha256:384b7f36a1ae50efe5f50fe299f276a83bf7acc8b7147517f34e27103270f016 \ - --hash=sha256:551f799d53e397843b6cde7e3c61de716fb487da512a21a954b7d0cbc06967e0 \ - --hash=sha256:6727e3a0208059cd4d621684e580d5e254322dacbd806e0d218360abd0d48a68 \ - --hash=sha256:7099bdefffbe2df81accad52579657b8f9f870170caa779049c9fd82d645c9b3 \ - --hash=sha256:76ebe11572409dfbe20ec25a823f9bc8781400ece5356aa33ec44903af7ec316 \ - --hash=sha256:8dc352c93a47a4760cf824c31c55ce26511af780481e8f67c796d2779acaa928 \ - --hash=sha256:a5afe619e8a861fe4d49df8e10d2c6963de0dac6b79350c4832bf3366c8496cf \ - --hash=sha256:b9ca1d264059cb016c853ebbc4f21c72d983e0f347c927ca29e283aec2f596cf \ - --hash=sha256:bd84379292e3c1a1bf0a05847c7c72b66bb581dccf8da1ef94cc82bf517efa7c \ - --hash=sha256:be85acae8f31c68311505cd96202bad43165cbd7be110c59222f918677e93248 \ - --hash=sha256:cca36540d637c80d11d8a44a998a068355f0c78b75ec6b0f152ecbf89dfdd67b \ - --hash=sha256:e0f0ef58f0ba6fbfaf5f91b67aad6852252c49b8f78015a2a5800cf74c7538d5 \ - --hash=sha256:fa722691c7ae5c023778ad0b040ab8619367bcfe44fd0d9e05a58751af86cdf8 +uv==0.11.7 \ + --hash=sha256:0df59ab0c6a4b14a763e8445e1c303af9abeb53cdfa4428daf9ff9642c0a3cce \ + --hash=sha256:162fa961a9a081dcea6e889c79f738a5ae56507047e4672964972e33c301bea9 \ + --hash=sha256:23d457d6731ebdb83f1bffebe4894edab2ef43c1ec5488433c74300db4958924 \ + --hash=sha256:46d971489b00bdb27e0aa715e4a5cd4ef2c28ea5b6ef78f2b67bf861eb44b405 \ + --hash=sha256:4e4d5e31bea86e1b6e0f5a0f95e14e80018e6f6c0129256d2915a4b3d793644d \ + --hash=sha256:553e67cc766d013ce24353fecd4ea5533d2aedcfd35f9fac430e07b1d1f23ed4 \ + --hash=sha256:5674dfb5944513f4b3735b05c2deba6b1b01151f46729d533d413a9a905f8c5d \ + --hash=sha256:5985a15a92bd9a170fc1947abb1fbc3e9828c5a430ad85b5bed8356c20b67a71 \ + --hash=sha256:6158b7e39464f1aa1e040daa0186cae4749a78b5cd80ac769f32ca711b8976b1 \ + --hash=sha256:750ee5b96959b807cf442b73dd8b55111862d63f258f896787ea5f06b68aaca9 \ + --hash=sha256:7d6a17507b8139b8803f445a03fd097f732ce8356b1b7b13cdb4dd8ef7f4b2e0 \ + --hash=sha256:8b2fe1ec6775dad10183e3fdce430a5b37b7857d49763c884f3a67eaa8ca6f8a \ + --hash=sha256:ceae53b202ea92bc954759bc7c7570cdcd5c3512fce15701198c19fd2dfb8605 \ + --hash=sha256:dd48823ca4b505124389f49ae50626ba9f57212b9047738efc95126ed5f3844d \ + --hash=sha256:eb91f52ee67e10d5290f2c2897e2171357f1a10966de38d83eefa93d96843b0c \ + --hash=sha256:f394331f0507e80ee732cb3df737589de53bed999dd02a6d24682f08c2f8ac4f \ + --hash=sha256:f422d39530516b1dfb28bb6e90c32bb7dacd50f6a383cd6e40c1a859419fbc8c \ + --hash=sha256:f97e9f4e4d44fb5c4dfaa05e858ef3414a96416a2e4af270ecd88a3e5fb049a9 \ + --hash=sha256:fab0bb43fbbc0ee5b5fee212078d2300c371b725faff7cf72eeaafa0bff0606b # via -r contrib/container/requirements.in wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/docs/docs/app/build.md b/docs/docs/app/build.md new file mode 100644 index 0000000000..4d97b03f11 --- /dev/null +++ b/docs/docs/app/build.md @@ -0,0 +1,35 @@ +--- +title: Build Orders +--- + +## Build Order List + +The build order list display lists all build orders: + +{{ image("app/build_list.png", "Build order list") }} + +Select an individual build order to display the detail view for that order. + +### Filtering + +Displayed build orders can be subsequently filtered using the search input at the top of the screen + +## Build Order Detail + +{{ image("app/build_detail.png", "Build order detail") }} + +### Edit Build Order Details + +From the detail view, select the *Edit* button in the top-right of the screen. This opens the build order editing display. + +### Required Parts Tab + +The *Required Parts* tab shows the parts required to complete this build order: + +{{ image("app/build_required_parts.png", "Build order required parts") }} + +### Build Outputs Tab + +The *Build Outputs* tab shows the stock items which have been produced as part of this build order: + +{{ image("app/build_outputs.png", "Build order outputs") }} diff --git a/docs/docs/app/po.md b/docs/docs/app/po.md index b6098b2d6f..7dbf0de24d 100644 --- a/docs/docs/app/po.md +++ b/docs/docs/app/po.md @@ -30,7 +30,7 @@ The *Line Items* tab shows the line items associated with this purchase order: {{ image("app/po_lines.png", "Purchase order line items") }} -Long press on a particular line item to receive the item into stock. +Select a particular line item to view the details for that line, and receive the line item into stock. ### Stock Items diff --git a/docs/docs/assets/images/app/build_detail.png b/docs/docs/assets/images/app/build_detail.png new file mode 100644 index 0000000000..59112cd1dd Binary files /dev/null and b/docs/docs/assets/images/app/build_detail.png differ diff --git a/docs/docs/assets/images/app/build_list.png b/docs/docs/assets/images/app/build_list.png new file mode 100644 index 0000000000..30e4516035 Binary files /dev/null and b/docs/docs/assets/images/app/build_list.png differ diff --git a/docs/docs/assets/images/app/build_outputs.png b/docs/docs/assets/images/app/build_outputs.png new file mode 100644 index 0000000000..1c2efcac97 Binary files /dev/null and b/docs/docs/assets/images/app/build_outputs.png differ diff --git a/docs/docs/assets/images/app/build_required_parts.png b/docs/docs/assets/images/app/build_required_parts.png new file mode 100644 index 0000000000..3240674b7d Binary files /dev/null and b/docs/docs/assets/images/app/build_required_parts.png differ diff --git a/docs/docs/assets/images/build/bom_compare.png b/docs/docs/assets/images/build/bom_compare.png new file mode 100644 index 0000000000..4f1e124c4a Binary files /dev/null and b/docs/docs/assets/images/build/bom_compare.png differ diff --git a/docs/docs/assets/images/build/bom_compare_icon.png b/docs/docs/assets/images/build/bom_compare_icon.png new file mode 100644 index 0000000000..e22b4c1b07 Binary files /dev/null and b/docs/docs/assets/images/build/bom_compare_icon.png differ diff --git a/docs/docs/assets/images/faq/boundary.png b/docs/docs/assets/images/faq/boundary.png new file mode 100644 index 0000000000..0a0f8a7f37 Binary files /dev/null and b/docs/docs/assets/images/faq/boundary.png differ diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 3f3bbe01f3..7f2b2c79a0 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -195,3 +195,14 @@ This means that either: - The docker user does not have write permission to the specified directory In either case, ensure that the directory is available *on your local machine* and the user account has the required permissions. + + +## Error Rendering Component + +Sometimes, following a software update, you may find that certain components of the web interface are not rendering correctly, and presented with a message similar to the screenshow below: + +{{ image("faq/boundary.png", "Error Rendering Component") }} + +This is often due to a caching issue with your web browser. Try performing a hard refresh of the page to clear the cache, this should resolve the issue in most cases. + +If the problem persists, refer to the [troubleshooting guide](./troubleshooting.md) for further assistance. 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/manufacturing/bom.md b/docs/docs/manufacturing/bom.md index 4114b5b9ea..87093f704e 100644 --- a/docs/docs/manufacturing/bom.md +++ b/docs/docs/manufacturing/bom.md @@ -4,7 +4,7 @@ title: Bill of Materials ## Bill of Materials -A Bill of Materials (BOM) defines the list of component parts required to make an assembly, [create builds](./build.md) and allocate inventory. +A Bill of Materials (BOM) defines the list of component parts required to make an assembly, [create build orders](./build.md) and allocate inventory. A part which can be built from other sub components is called an *Assembly*. @@ -92,9 +92,16 @@ Note that inherited BOM Line Items only flow "downwards" in the variant inherita !!! info "Editing Inherited Items" When editing an inherited BOM Line Item for a template part, the changes are automatically reflected in the BOM of any variant parts. -## BOM Creation +## BOM Editing -BOMs can be created manually, by adjusting individual line items, or by uploading (importing) an existing BOM file. +Bills of Material (BOMs) can be created manually, by adjusting individual line items, or by uploading (importing) an existing BOM file. + +### Editing Mode + +By default, the BOM is displayed in "view" mode. To edit the BOM, click on the {{ icon("edit", color="blue", title="Edit") }} icon at the top of the BOM panel. This will enable editing mode, which allows you to add, adjust or delete BOM line items. + +!!! warning "Permissions" + Only users with the appropriate permissions can edit BOMs. If you do not have permission to edit the BOM, the "Edit" icon will not be visible. ### Importing a BOM @@ -162,89 +169,26 @@ If the BOM requires revalidation, the status will be displayed as "Not Validated {{ image("build/bom_invalid.png", "BOM Not Validated") }} -## Required Quantity Calculation +## BOM Comparison -When a new [Build Order](./build.md) is created, the required production quantity of each component part is calculated based on the BOM line items defined for the assembly being built. To calculate the required production quantity of a component part, the following considerations are made: +It is possible to compare the BOM of one assembly with another assembly. This comparison can highlight different component parts, quantities and other properties of the BOM line items. -### Base Quantity +To compare the BOM of one assembly with another, navigate to the "Bill of Materials" tab of the part detail page, then click on the {{ icon("git-compare", color="blue", title="Compare BOM") }} icon at the top of the BOM table: -The base quantity of a BOM line item is defined by the `Quantity` field of the BOM line item. This is the number of parts which are required to build one assembly. This value is multiplied by the number of assemblies which are being built to determine the total quantity of parts required. +{{ image("build/bom_compare_icon.png", "BOM Compare") }} -``` -Required Quantity = Base Quantity * Number of Assemblies -``` +This will open the BOM comparison view, which allows you to select a secondary assembly to compare with the primary assembly. The BOM line items of the two assemblies will be displayed side by side, with differences highlighted: -### Attrition +{{ image("build/bom_compare.png", "BOM Compare") }} -The `Attrition` field of a BOM line item is used to account for expected losses during the production process. This is expressed as a percentage of the `Base Quantity` (e.g. 2%). +### Display Mode -If a non-zero attrition percentage is specified, it is applied to the calculated `Required Quantity` value. +When comparing BOMs from two different assemblies, the user can select from the following view modes: -``` -Required Quantity = Required Quantity * (1 + Attrition Percentage) -``` +| View Mode | Description | +| --- | --- | +| *Show all parts* | Display all BOM line items from both assemblies. Differences are highlighted. | +| *Show different parts* | Display only the BOM line items which are different between the two assemblies. | +| *Show common parts* | Display only the BOM line items which are common between the two assemblies. | -!!! info "Optional" - The attrition percentage is optional. If not specified, it defaults to 0%. - -### Setup Quantity - -The `Setup Quantity` field of a BOM line item is used to account for fixed losses during the production process. This is an additional quantity of the part which is required to ensure that the production run can be completed successfully. This value is added to the calculated `Required Quantity`. - -``` -Required Quantity = Required Quantity + Setup Quantity -``` - -!!! info "Optional" - The setup quantity is optional. If not specified, it defaults to 0. - -### Rounding Multiple - -The `Rounding Multiple` field of a BOM line item is used to round the calculated `Required Quantity` value to the nearest multiple of the specified value. This is useful for ensuring that the required quantity is a whole number, or to meet specific packaging requirements. - -``` -Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple -``` - -!!! info "Optional" - The rounding multiple is optional. If not specified, no rounding is applied to the calculated production quantity. - -### Example Calculation - -Consider a BOM line item with the following properties: - -- Base Quantity: 3 -- Attrition: 2% (0.02) -- Setup Quantity: 10 -- Rounding Multiple: 25 - -If we are building 100 assemblies, the required quantity would be calculated as follows: - -``` -Required Quantity = Base Quantity * Number of Assemblies - = 3 * 100 - = 300 - -Attrition Value = Required Quantity * Attrition Percentage - = 300 * 0.02 - = 6 - -Required Quantity = Required Quantity + Attrition Value - = 300 + 6 - = 306 - -Required Quantity = Required Quantity + Setup Quantity - = 306 + 10 - = 316 - -Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple - = ceil(316 / 25) * 25 - = 13 * 25 - = 325 - -``` - -So the final required production quantity of the component part would be `325`. - -!!! info "Calculation" - The required quantity calculation is performed automatically when a new [Build Order](./build.md) is created. +In each case, any differences between the BOM line items are highlighted in red. diff --git a/docs/docs/manufacturing/required.md b/docs/docs/manufacturing/required.md new file mode 100644 index 0000000000..949277b9ab --- /dev/null +++ b/docs/docs/manufacturing/required.md @@ -0,0 +1,90 @@ +--- +title: Required Build Quantity +--- + +## Required Build Quantity + +When a new [Build Order](./build.md) is created, the required production quantity of each component part is calculated based on the BOM line items defined for the assembly being built. To calculate the required production quantity of a component part, the following considerations are made: + +### Base Quantity + +The base quantity of a BOM line item is defined by the `Quantity` field of the BOM line item. This is the number of parts which are required to build one assembly. This value is multiplied by the number of assemblies which are being built to determine the total quantity of parts required. + +``` +Required Quantity = Base Quantity * Number of Assemblies +``` + +### Attrition + +The `Attrition` field of a BOM line item is used to account for expected losses during the production process. This is expressed as a percentage of the `Base Quantity` (e.g. 2%). + +If a non-zero attrition percentage is specified, it is applied to the calculated `Required Quantity` value. + +``` +Required Quantity = Required Quantity * (1 + Attrition Percentage) +``` + +!!! info "Optional" + The attrition percentage is optional. If not specified, it defaults to 0%. + +### Setup Quantity + +The `Setup Quantity` field of a BOM line item is used to account for fixed losses during the production process. This is an additional quantity of the part which is required to ensure that the production run can be completed successfully. This value is added to the calculated `Required Quantity`. + +``` +Required Quantity = Required Quantity + Setup Quantity +``` + +!!! info "Optional" + The setup quantity is optional. If not specified, it defaults to 0. + +### Rounding Multiple + +The `Rounding Multiple` field of a BOM line item is used to round the calculated `Required Quantity` value to the nearest multiple of the specified value. This is useful for ensuring that the required quantity is a whole number, or to meet specific packaging requirements. + +``` +Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple +``` + +!!! info "Optional" + The rounding multiple is optional. If not specified, no rounding is applied to the calculated production quantity. + +### Example Calculation + +Consider a BOM line item with the following properties: + +- Base Quantity: 3 +- Attrition: 2% (0.02) +- Setup Quantity: 10 +- Rounding Multiple: 25 + +If we are building 100 assemblies, the required quantity would be calculated as follows: + +``` +Required Quantity = Base Quantity * Number of Assemblies + = 3 * 100 + = 300 + +Attrition Value = Required Quantity * Attrition Percentage + = 300 * 0.02 + = 6 + +Required Quantity = Required Quantity + Attrition Value + = 300 + 6 + = 306 + +Required Quantity = Required Quantity + Setup Quantity + = 306 + 10 + = 316 + +Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple + = ceil(316 / 25) * 25 + = 13 * 25 + = 325 + +``` + +So the final required production quantity of the component part would be `325`. + +!!! info "Calculation" + The required quantity calculation is performed automatically when a new [Build Order](./build.md) is created. 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/mixins/app.md b/docs/docs/plugins/mixins/app.md index e607bc7b52..895341d4c6 100644 --- a/docs/docs/plugins/mixins/app.md +++ b/docs/docs/plugins/mixins/app.md @@ -8,3 +8,27 @@ If this mixin is added to a plugin the directory the plugin class is defined in !!! warning "Danger Zone" Only use this mixin if you have an understanding of Django's [app system]({% include "django.html" %}/ref/applications). Plugins with this mixin are deeply integrated into InvenTree and can cause difficult to reproduce or long-running errors. Use the built-in testing functions of Django to make sure your code does not cause unwanted behaviour in InvenTree before releasing. + +## Custom Models + +This mixin allows you to define custom database models within your plugin. These models will be automatically registered with the InvenTree server, and will be available for use within your plugin code. + +### Model Permissions + +Some database operations within the InvenTree ecosystem may require custom permissions checks - to determine which actions a user can perform against a given model. If your plugin defines custom models, you may need to implement a custom permission check method on your model class. + +Each model class can implement a `check_user_permission` classmethod, which will be called by the InvenTree permission system when checking permissions for that model. This method should return `True` if the user has the required permissions, and `False` otherwise. + + +```python +class MyCustomModel(models.Model): + # model fields here + + @classmethod + def check_user_permission(cls, user: User, permission: str) -> bool: + # custom permission logic here + return True # or False +``` + +!!! warning "Default Permissions" + By default, if the `check_user_permission` method is not implemented, the InvenTree permission system will return `False` for all permission checks against that model. This is to ensure that no permissions are granted by default, and that the plugin developer must explicitly define the required permissions for their custom models. 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/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 b04849927d..120bbc5b56 100644 --- a/docs/docs/settings/error_codes.md +++ b/docs/docs/settings/error_codes.md @@ -105,6 +105,11 @@ A potentially critical mismatch between the backup environment and the current r While using [invoke](../start/invoke.md), this can be overridden with the `--restore-allow-newer-version` flag. +#### INVE-E17 +**Error rendering component** + +An error occurred while rendering a component in the frontend. Typically this is caused by a browser caching issue, and can be resolved by clearing the browser cache and refreshing the page. If the issue persists, check the browser console for more information about the error. + ### INVE-W (InvenTree Warning) Warnings - These are non-critical errors which should be addressed when possible. diff --git a/docs/docs/settings/permissions.md b/docs/docs/settings/permissions.md index d6b717ed62..6e169af8f5 100644 --- a/docs/docs/settings/permissions.md +++ b/docs/docs/settings/permissions.md @@ -28,7 +28,8 @@ InvenTree functionality is split into a number of distinct roles. A group will h | Role | Description | | ---- | ----------- | | **Admin** | The *admin* role is related to assigning user permissions. | -| **Build** | The *build* role is related to accessing Build Order and Bill of Materials data | +| **BOM** | The *bom* role is related to accessing Bill of Materials data | +| **Build** | The *build* role is related to accessing manufacturing / Build Order | | **Part** | The *part* role is related to accessing Part data | | **Part Category** | The *part category* role is related to accessing Part Category data | | **Purchase Order** | The *purchase* role is related to accessing Purchase Order data | diff --git a/docs/docs/settings/user.md b/docs/docs/settings/user.md index faaa7aae8a..bd862cd695 100644 --- a/docs/docs/settings/user.md +++ b/docs/docs/settings/user.md @@ -27,6 +27,7 @@ The *Display Settings* screen shows general display configuration options: {{ usersetting("FORMS_CLOSE_USING_ESCAPE") }} {{ usersetting("DISPLAY_STOCKTAKE_TAB") }} {{ usersetting("SHOW_FULL_CATEGORY_IN_TABLES")}} +{{ usersetting("SHOW_BOM_SUBASSEMBLY_LEVELS")}} {{ usersetting("ENABLE_LAST_BREADCRUMB") }} {{ usersetting("SHOW_FULL_LOCATION_IN_TABLES") }} 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 37688941f0..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: @@ -546,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 @@ -562,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/docs/start/installer.md b/docs/docs/start/installer.md index 997a0fefc8..55f367bc90 100644 --- a/docs/docs/start/installer.md +++ b/docs/docs/start/installer.md @@ -3,9 +3,15 @@ title: InvenTree Installer --- ## Installer + The InvenTree installer automates the installation procedure for a production InvenTree server. -Supported OSs are Debian 10, 11, 12 and Ubuntu 20.04 LTS, 22.04 LTS, 24.04 LTS. +The installer supports the following Linux distributions: + +- Debian 11, 12 +- Ubuntu 22.04 LTS, 24.04 LTS + +Support for other OS versions is not currently planned. If you are using a different distribution, you can still follow the [docker](./docker.md) or [bare metal](./install.md) installation instructions. ### Quick Script 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/mkdocs.yml b/docs/mkdocs.yml index a79df4ce30..82bb9cd772 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -150,6 +150,7 @@ nav: - Bill of Materials: manufacturing/bom.md - Build Orders: manufacturing/build.md - Build Outputs: manufacturing/output.md + - Required Quantity: manufacturing/required.md - Allocating Stock: manufacturing/allocate.md - External Manufacturing: manufacturing/external.md - Example Build Order: manufacturing/example.md @@ -263,6 +264,7 @@ nav: - Stock: app/stock.md - Purchase Orders: app/po.md - Sales Orders: app/so.md + - Build Orders: app/build.md - Settings: app/settings.md - Privacy: app/privacy.md - Translation: app/translation.md diff --git a/docs/requirements.in b/docs/requirements.in index 708b250cba..7e88513072 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -6,5 +6,5 @@ mkdocs-redirects mkdocs-simple-hooks>=0.1,<1.0 mkdocs-include-markdown-plugin neoteroi-mkdocs -mkdocstrings[python]>=0.25.0,<=1.0.3 +mkdocstrings[python]<=1.0.4,>=1.0.4 mkdocs-mermaid2-plugin diff --git a/docs/requirements.txt b/docs/requirements.txt index a8a1ba1f96..bd7e057613 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -169,9 +169,9 @@ charset-normalizer==3.4.7 \ # 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 @@ -202,9 +202,9 @@ gitdb==4.0.12 \ --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf # via gitpython -gitpython==3.1.46 \ - --hash=sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f \ - --hash=sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058 +gitpython==3.1.47 \ + --hash=sha256:489f590edfd6d20571b2c0e72c6a6ac6915ee8b8cd04572330e3842207a78905 \ + --hash=sha256:dba27f922bd2b42cb54c87a8ab3cb6beb6bf07f3d564e21ac848913a05a8a3cd # via mkdocs-git-revision-date-localized-plugin griffelib==2.0.0 \ --hash=sha256:01284878c966508b6d6f1dbff9b6fa607bc062d8261c5c7253cb285b06422a7f @@ -430,9 +430,9 @@ mkdocs-simple-hooks==0.1.5 \ --hash=sha256:dddbdf151a18723c9302a133e5cf79538be8eb9d274e8e07d2ac3ac34890837c \ --hash=sha256:efeabdbb98b0850a909adee285f3404535117159d5cb3a34f541d6eaa644d50a # via -r docs/requirements.in -mkdocstrings[python]==1.0.3 \ - --hash=sha256:0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046 \ - --hash=sha256:ab670f55040722b49bb45865b2e93b824450fb4aef638b00d7acb493a9020434 +mkdocstrings[python]==1.0.4 \ + --hash=sha256:3969a6515b77db65fd097b53c1b7aa4ae840bd71a2ee62a6a3e89503446d7172 \ + --hash=sha256:63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b # via # -r docs/requirements.in # mkdocstrings-python @@ -444,9 +444,9 @@ neoteroi-mkdocs==1.2.0 \ --hash=sha256:58e25cb1b9db093ffa8d12bdb33264bf567cac30fb964b56e0a493efa749ad6e \ --hash=sha256:91b6aa95a4e46c9bb93e00e021d2044cb0c7d80c0b4600434ff8f440d613a0a8 # via -r docs/requirements.in -packaging==26.0 \ - --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ - --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 +packaging==26.1 \ + --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ + --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de # via # -c src/backend/requirements.txt # mkdocs @@ -463,9 +463,9 @@ pathspec==1.0.4 \ # mkdocs # mkdocs-macros-plugin # properdocs -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 # mkdocs-get-deps @@ -591,9 +591,9 @@ requests==2.33.1 \ # mkdocs-macros-plugin # mkdocs-material # mkdocs-mermaid2-plugin -rich==14.3.3 \ - --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ - --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich==15.0.0 \ + --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ + --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 # via neoteroi-mkdocs setuptools==82.0.1 \ --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ diff --git a/pyproject.toml b/pyproject.toml index 9ce50f3710..63a0fd5a6e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -109,12 +109,13 @@ unresolved-reference="ignore" # 21 # see https://github.com/astral-sh/ty/issues unresolved-attribute="ignore" # 505 # need Plugin Mixin typing call-non-callable="ignore" # 8 ## invalid-assignment="ignore" # 17 # need to wait for better django field stubs -invalid-method-override="ignore" # 99 +# invalid-method-override="ignore" # 99 invalid-return-type="ignore" # 22 ## -possibly-missing-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164 +# possibly-missing-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164 unknown-argument="ignore" # 3 # need to wait for better django field stubs invalid-argument-type="ignore" # 49 no-matching-overload="ignore" # 3 # need to wait for betterdjango field stubs +possibly-unbound-attribute="ignore" # 21 [tool.coverage.run] source = ["src/backend/InvenTree", "InvenTree"] diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index dfc73236b7..87edf69474 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -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, diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 1400e67eb4..4c7c25654e 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,25 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 478 +INVENTREE_API_VERSION = 482 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v482 -> 2026-03-15 : https://github.com/inventree/InvenTree/pull/11540 + - Add id to the ordering fields of the Parts model + +v481 -> 2026-04-28 : https://github.com/inventree/InvenTree/pull/11825 + - Adds new "bom" ruleset and associated permissions for BOM management, separate from the "part" ruleset which remains focused on part management + +v480 -> 2026-04-27 : https://github.com/inventree/InvenTree/pull/11816 + - The "issued_by" field on the Build API endpoint is now read-only, and is automatically set to the current user when a build is created + +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 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..aa54bb6014 100644 --- a/src/backend/InvenTree/InvenTree/config.py +++ b/src/backend/InvenTree/InvenTree/config.py @@ -9,7 +9,7 @@ import shutil import string import sys from pathlib import Path -from typing import Optional +from typing import Any, Optional logger = logging.getLogger('inventree') CONFIG_DATA = None @@ -254,6 +254,24 @@ def do_typecast(value, type, var_name=None): return value +def get_config_value(config_key: str) -> Optional[Any]: + """Helper function to retrieve a configuration value from the config file.""" + cfg_data = load_config_data() + + result = None + + # Hack to allow 'path traversal' in configuration file + for key in config_key.strip().split('.'): + if type(cfg_data) is not dict or key not in cfg_data: + result = None + break + + result = cfg_data[key] + cfg_data = cfg_data[key] + + return result + + def get_setting(env_var=None, config_key=None, default_value=None, typecast=None): """Helper function for retrieving a configuration setting value. @@ -270,10 +288,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(), } @@ -288,18 +309,7 @@ def get_setting(env_var=None, config_key=None, default_value=None, typecast=None # Next, try to load from configuration file if config_key is not None: - cfg_data = load_config_data() - - result = None - - # Hack to allow 'path traversal' in configuration file - for key in config_key.strip().split('.'): - if type(cfg_data) is not dict or key not in cfg_data: - result = None - break - - result = cfg_data[key] - cfg_data = cfg_data[key] + result = get_config_value(config_key) if result is not None: set_metadata('yaml') @@ -544,13 +554,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/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/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/setting/db_backend.py b/src/backend/InvenTree/InvenTree/setting/db_backend.py index e90f01c8f9..03e9f12cff 100644 --- a/src/backend/InvenTree/InvenTree/setting/db_backend.py +++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py @@ -1,12 +1,85 @@ """Configuration settings specific to a particular database backend.""" +from pathlib import Path + import structlog -from InvenTree.config import get_boolean_setting, get_setting +from InvenTree.config import get_boolean_setting, get_config_value, get_setting logger = structlog.get_logger('inventree') +def get_db_backend(): + """Return the database backend configuration.""" + # For the core database configuration values, we test for UPPERCASE configuration values as a backup, + # due to legacy reasons (original config files were uppercase, + # but we moved to lowercase for consistency with other settings. + + db_config = { + 'ENGINE': get_setting( + 'INVENTREE_DB_ENGINE', 'database.engine', '', typecast=str + ) + or get_config_value('database.ENGINE'), + 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', '', typecast=str) + or get_config_value('database.NAME'), + 'USER': get_setting('INVENTREE_DB_USER', 'database.user', '', typecast=str) + or get_config_value('database.USER'), + 'PASSWORD': get_setting( + 'INVENTREE_DB_PASSWORD', 'database.password', '', typecast=str + ) + or get_config_value('database.PASSWORD'), + 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', '', typecast=str) + or get_config_value('database.HOST'), + 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', '', typecast=str) + or get_config_value('database.PORT'), + 'OPTIONS': get_setting( + 'INVENTREE_DB_OPTIONS', 'database.options', {}, typecast=dict + ) + or get_config_value('database.OPTIONS') + 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 444919d6b8..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) @@ -222,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' @@ -386,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 @@ -401,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') @@ -437,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'] = {} @@ -453,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: @@ -642,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( @@ -776,133 +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) -) - -# 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 -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': SYNC_TASKS, - '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 @@ -976,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 @@ -1150,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/build/api.py b/src/backend/InvenTree/build/api.py index 232b7adca7..7253f87f95 100644 --- a/src/backend/InvenTree/build/api.py +++ b/src/backend/InvenTree/build/api.py @@ -386,6 +386,20 @@ class BuildList( kwargs['create'] = True return super().get_serializer(*args, **kwargs) + def create(self, request, *args, **kwargs): + """Save user information on order creation.""" + serializer = self.get_serializer(data=self.clean_data(request.data)) + serializer.is_valid(raise_exception=True) + + build = serializer.save() + build.issued_by = request.user + build.save() + + headers = self.get_success_headers(serializer.data) + return Response( + serializer.data, status=status.HTTP_201_CREATED, headers=headers + ) + class BuildDetail(BuildMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a Build object.""" diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index 39018c661a..c908bddd24 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -403,6 +403,14 @@ class Build( related_name='builds_issued', ) + @property + def created_by(self): + """Alias for issued_by field. + + This is used for compatibility with the order models + """ + return self.issued_by + responsible = models.ForeignKey( users.models.Owner, on_delete=models.SET_NULL, diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 724182c978..9264af7375 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -104,7 +104,8 @@ class BuildSerializer( read_only_fields = [ 'completed', 'creation_date', - 'completion_data', + 'issued_by', + 'completion_date', 'status', 'status_text', 'level', diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index e63a313238..b7aa4a9cbd 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -568,6 +568,9 @@ class BuildTest(BuildAPITest): self.assertEqual(bo.children.count(), 0) + self.assertIsNotNone(bo.issued_by) + self.assertEqual(bo.issued_by, self.user) + class BuildAllocationTest(BuildAPITest): """Unit tests for allocation of stock items against a build order. diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index 85f9b10f55..f4d2cd671c 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -395,21 +395,8 @@ class NotificationMessageViewSet( queryset = queryset.filter(user=request.user) return queryset - def get_permissions(self): - """Override permissions for list view.""" - if self.action == 'list': - return [IsAuthenticatedOrReadScope()] - else: - return super().get_permissions() - - def list(self, request, *args, **kwargs): - """List view for all notifications of the current user.""" - # TODO @matmair permissions for this are currently being overwritten in get_permissions - this should be moved to a dedicated endpoint - return super().list(request, *args, **kwargs) - - # TODO @matmair this should really be a POST @action( - detail=False, methods=['get'], permission_classes=[IsAuthenticatedOrReadScope] + detail=False, methods=['post'], permission_classes=[IsAuthenticatedOrReadScope] ) def readall(self, request, *args, **kwargs): """Set all messages for the current user as read.""" @@ -1248,7 +1235,6 @@ class EmailViewSet(BulkDeleteViewsetMixin, RetrieveDestroyModelViewSet): 'thread_id_key', ] - @extend_schema(responses={201: common.serializers.TestEmailSerializer}) @action( detail=False, methods=['post'], @@ -1270,8 +1256,7 @@ class EmailViewSet(BulkDeleteViewsetMixin, RetrieveDestroyModelViewSet): raise serializers.ValidationError( detail=f'Failed to send test email: "{reason}"' ) # pragma: no cover - # TODO @matmair - breaking change: this should be a 200 - return Response(serializer.data, status=201) + return Response(serializer.data) admin_router.register('email', EmailViewSet, basename='api-email') diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 35f7808750..f8041a0a82 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -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): diff --git a/src/backend/InvenTree/common/setting/user.py b/src/backend/InvenTree/common/setting/user.py index 23dee7e5bd..57a117e20e 100644 --- a/src/backend/InvenTree/common/setting/user.py +++ b/src/backend/InvenTree/common/setting/user.py @@ -251,6 +251,12 @@ USER_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': False, 'validator': bool, }, + 'SHOW_BOM_SUBASSEMBLY_LEVELS': { + 'name': _('Show Subassemblies in BOM table'), + 'description': _('Enable display of subassemblies in the BOM table'), + 'default': True, + 'validator': bool, + }, 'NOTIFICATION_ERROR_REPORT': { 'name': _('Receive error reports'), 'description': _('Receive notifications for system errors'), 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 bf89f8b6c2..21a9474328 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -1332,7 +1332,7 @@ class NotificationTest(InvenTreeAPITestCase): self.assertEqual(len(self.get(url, expected_code=200).data), 1) # Read with readall endpoint - self.get(reverse('api-notifications-readall'), {}, expected_code=200) + 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) diff --git a/src/backend/InvenTree/config_template.yaml b/src/backend/InvenTree/config_template.yaml index ab5f232127..4b790e7c17 100644 --- a/src/backend/InvenTree/config_template.yaml +++ b/src/backend/InvenTree/config_template.yaml @@ -18,15 +18,15 @@ # TO MAINTAINERS: Do not change database strings database: # --- Available options: --- - # ENGINE: Database engine. Selection from: + # engine: Database engine. Selection from: # - mysql # - postgresql # - sqlite3 - # NAME: Database name - # USER: Database username (if required) - # PASSWORD: Database password (if required) - # HOST: Database host address (if required) - # PORT: Database host port (if required) + # name: Database name + # user: Database username (if required) + # password: Database password (if required) + # host: Database host address (if required) + # port: Database host port (if required) # Base URL for the InvenTree server (or use the environment variable INVENTREE_SITE_URL) # site_url: 'http://localhost:8000' diff --git a/src/backend/InvenTree/generic/states/transition.py b/src/backend/InvenTree/generic/states/transition.py index ab9c48c47b..80ae2f7f3c 100644 --- a/src/backend/InvenTree/generic/states/transition.py +++ b/src/backend/InvenTree/generic/states/transition.py @@ -63,7 +63,7 @@ class TransitionMethod: result: bool - True if the transition method was successful, False otherwise. Raises: - ValidationError: Alert the user that the transition failued + ValidationError: Alert the user that the transition failed """ raise NotImplementedError( 'TransitionMethod.transition must be implemented' diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 81e9282eba..75e47597df 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:33\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "ملاحظات" @@ -215,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 "البريد الإلكتروني" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 1459ae58c3..0ff0231d5e 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "Бележки" @@ -215,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 "" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Потребител" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "Място в склада" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Места в склада" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 eb33c056d7..2a3460c7b3 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-05-01 04:02\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" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -165,19 +165,19 @@ msgstr "Data obsahují zakázaný markdown obsah" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "Neplatná URH: žádný název hostitele" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "Neplatná URL: nelze zjistit název hostitele" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL směřuje na soukromou nebo rezervovanou IP adresu" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "Příliš mnoho přesměrování" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -665,89 +665,89 @@ msgstr "Max datum" msgid "Exclude Tree" msgstr "Vyloučit strom" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Volitelné" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Sledováno" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testovatelné" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 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:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Spotřebováno" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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 +#: build/api.py:685 msgid "Build not found" -msgstr "" +msgstr "Sestava nenalezena" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Výstup" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrovat podle ID výstupní položky zásoby. Použijte 'null' pro nalezení odinstalovaných položek sestavení." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Výrobní příkazy" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Zdrojové umístění" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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í" @@ -907,120 +907,120 @@ msgstr "Vystavil" msgid "User who issued this build order" msgstr "Uživatel, který vystavil tento výrobní příkaz" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Odpovědný" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Uživatel nebo skupina odpovědná za tento výrobní příkaz" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Odkaz na externí URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Priorita sestavení" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Kód projektu" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Kód projektu pro tento výrobní příkaz" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Nelze dokončit výrobní příkaz s otevřenými podobjednávkami" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Nelze dokončit výrobní příkaz s neúplnými výstupy" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Nepodařilo se uvolnit úlohu pro dokončení přidělení sestavy" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Výrobní příkaz {build} byl dokončen" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "U sledovatelných dílů musí být uvedena sériová čísla" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Výstup sestavy {serial} neprošel všemi požadavky" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "Přiřazené skladové položky jsou stále ve výrobě" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Nelze částečně dokončit výrobní příkaz s přiřazenými položkami" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Řádková položka výrobního příkazu" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Vytvořit objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Množství" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Vyžadované množství pro výrobní příkaz" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Množství spotřebovaných zásob" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Položka sestavení musí specifikovat výstup sestavení, protože hlavní díl je označen jako sledovatelný" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Vybraná skladová položka neodpovídá řádku kusovníku" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "Přiřazené množství musí být vyšší než nula" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zabrané množství ({q}) nesmí překročit dostupné skladové množství ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Cílová skladová položka" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Úroveň sestavení" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Název dílu" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 msgid "Enter serial numbers for build outputs" msgstr "Zadejte sériová čísla pro sestavení výstupů" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Skladové umístění pro výstup sestavy" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Skladové umístění pro sešrotované výstupy" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Zahodit alokace" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Důvod vyřazení výstupu(ů) sestavy" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Umístění dokončených výstupů sestavy" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Přijmout neúplné přidělení" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Spotřebovat přidělené zásoby" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Odstranit neúplné výstupy" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Není povoleno" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 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:762 msgid "Overallocated Stock" msgstr "Nadměrně přidělené zásoby" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 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:781 msgid "Accept Unallocated" msgstr "Přijmout nepřidělené" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 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:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Přijmout neúplné" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Požadované množství sestavy nebylo dokončeno" -#: build/serializers.py:816 +#: build/serializers.py:824 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:827 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:830 msgid "Build order has incomplete outputs" msgstr "Výrobní příkaz má neúplné výstupy" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Linka sestavy" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Výstup sestavy" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Řádková položka sestavy" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1097 +#: build/serializers.py:1105 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:1110 msgid "Interchangeable Stock" msgstr "Zaměnitelné zásoby" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Náhradní zásoby" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Povolit přidělování náhradních dílů" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "Všechny položky" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "Nesledované položky" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "Sledované položky" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "Typ položky" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "Vyberte typ položky pro automatické přiřazení" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Reference v kusovníku" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID dílu kusovníku" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Název dílu kusovníku" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "Informace instalace" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Přidělené množství" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Reference sestavení" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Název kategorie dílů" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sledovatelné" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Položka kusovníku" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostupné zásoby" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Dostupné náhradní zásoby" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Dostupná varianta skladu" -#: build/serializers.py:1729 +#: build/serializers.py:1753 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:1790 msgid "Optional notes for the stock consumption" msgstr "Nepovinné poznámky ke spotřebě zásob" -#: build/serializers.py:1783 +#: build/serializers.py:1807 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:1812 msgid "Duplicate build item allocation" msgstr "Duplikovat přidělení položky sestavení" -#: build/serializers.py:1806 +#: build/serializers.py:1830 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:1835 msgid "Duplicate build line allocation" msgstr "Duplikovat přiřazení výrobní linky" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Musí být poskytnuta alespoň jedna linka nebo předmět" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "Je odkaz" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Je soubor" -#: common/api.py:790 +#: 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:803 +#: 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" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Uživatel" msgid "Price break quantity" msgstr "Množství cenové slevy" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1652,7 +1652,7 @@ msgstr "Název tohoto webhooku" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivní" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Parametry zaškrtávacího pole nemohou mít jednotky" msgid "Checkbox parameters cannot have choices" msgstr "Parametry zaškrtávacího pole nemohou mít výběr" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Volby musí být jedinečné" @@ -2094,7 +2094,7 @@ msgstr "Zaškrtávací políčko" msgid "Is this parameter a checkbox?" msgstr "Je tento parametr zaškrtávací políčko?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Volby" @@ -2106,7 +2106,7 @@ msgstr "Platné volby pro tento parametr (oddělené čárkami)" msgid "Selection list for this parameter" msgstr "Seznam výběru pro tento parametr" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Povoleno" @@ -2126,7 +2126,7 @@ msgstr "Parametry" msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2752 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" @@ -2140,7 +2140,7 @@ msgstr "ID cílového modelu pro tento parametr" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablona" @@ -2148,7 +2148,7 @@ msgstr "Šablona" msgid "Parameter template" msgstr "Šablona parametru" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" @@ -2156,18 +2156,18 @@ msgstr "Data" msgid "Parameter Value" msgstr "Hodnota parametru" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Volitelné pole pro poznámku" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2547,19 +2547,19 @@ msgstr "Zobrazovat okno `o aplikaci` pouze superuživatelům" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "Zobrazit banner superuživatele" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +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 "" +msgstr "Zobrazit banner administrátora" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +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" @@ -2859,8 +2859,8 @@ msgstr "Díly jsou ve výchozím nastavení šablony" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Vypnuto: Celá kategorie se ukáže jako nápověda. Zapnuto: Celá kategorie se ukáže jako prostý text." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "Zobrazit podsestavy v tabulce kusovníku" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "Povolit zobrazení podsestav v tabulce kusovníku" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Přijímat zprávy o chybách" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Dostávat oznámení o systémových chybách" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Poslední použité tiskárny" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Uložte poslední použité tiskárny pro uživatele" @@ -3988,33 +3996,33 @@ msgstr "Díl je aktivní" msgid "Manufacturer is Active" msgstr "Výrobce je aktivní" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Díl dodavatele je aktivní" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Primární díl dodavatele" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Interní díl je aktivní" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Dodavatel je aktivní" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Má zásoby" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Zvolte díl" msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "Adresa URL pro odkaz na externí díl dodavatele" msgid "Supplier part description" msgstr "Popis dílu dodavatele" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "základní cena" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Počet kusů v balení" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Celkové množství dodávané v jednom balení. Pro jednotlivé položky ponechte prázdné." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "více" @@ -4339,14 +4347,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ě" @@ -4451,67 +4463,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" @@ -4821,7 +4833,7 @@ msgstr "Objednávka" msgid "Order Complete" msgstr "Objednávka byla dokončena" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Interní díl" @@ -4839,7 +4851,7 @@ msgstr "Má zásilku" #: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "Zásilka nebyla nalezena" #: order/api.py:1840 order/models.py:577 order/models.py:1973 #: order/models.py:2099 @@ -4918,7 +4930,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:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Číslo objednávky" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Stav" @@ -5010,10 +5022,10 @@ msgstr "Množství musí být kladné" #: 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:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5077,11 +5089,11 @@ msgstr "Množství položky" #: order/models.py:1814 msgid "Line Number" -msgstr "" +msgstr "Číslo linky" #: order/models.py:1815 msgid "Line number for this item (optional)" -msgstr "" +msgstr "Číslo řádku pro tuto položku (nepovinné)" #: order/models.py:1822 msgid "Line item reference" @@ -5139,7 +5151,7 @@ msgstr "Doručeno" msgid "Number of items received" msgstr "Počet přijatých položek" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Kontroloval(a)" msgid "User who checked this shipment" msgstr "Uživatel, který zkontroloval tuto zásilku" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Přidělené množství nesmí překročit množství zásob" msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Název dodavatele" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Objednávku nelze zrušit" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: 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:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Objednávka není otevřena" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatická cena" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Měna nákupní ceny" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Sloučit položky" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interní název dílu" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Objednávka musí být zadána" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Řádková položka" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: 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:837 +#: 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:847 +#: 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:855 order/serializers.py:2037 +#: 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:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Čárový kód" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Naskenovaný čárový kód" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Tento čárový kód se již používá" -#: order/serializers.py:962 order/serializers.py:2056 +#: 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:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Místo určení musí být specifikováno" -#: order/serializers.py:988 +#: 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:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Zásilky" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Dokončené zásilky" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Přidělené řádky" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Měna prodejní ceny" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Přidělené položky" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nebyly poskytnuty žádné údaje o zásilce" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Množství musí být kladné" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Zadejte sériová čísla pro přidělení" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Zásilka již byla odeslána" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Následující sériová čísla nejsou k dispozici" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Řádkový předmět vratky" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Řádková položka neodpovídá vratce" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Řádková položka již byla přijata" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Množství k vrácení" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Měna ceny řádku" @@ -5732,71 +5744,71 @@ msgstr "Vyloučit podkategorie v zadané kategorii" msgid "Has Results" msgstr "Má výsledky" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Je varianta" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Je revizí" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Má revize" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "Kusovník schválen" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Kaskádové kategorie" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Pokud je pravda, zahrne položky z podkategorií dané kategorie" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrovat podle numerického ID kategorie nebo doslovného 'null'" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "Sestavený díl je aktivní" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "Sestavený díl je sledovatelný" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Sestavený díl je testovatelný" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "Kompotenta je aktivní" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "Komponenta je sledovatelná" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Díl komponenty je testovatelný" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "Komponenta je část sestavy" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "Komponenta je virtuální" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "Má dostupné zásoby" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Využití" @@ -5805,7 +5817,7 @@ msgstr "Využití" msgid "Part Category" msgstr "Kategorie dílu" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Kategorie dílů" @@ -5837,7 +5849,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á)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Díly" @@ -5903,7 +5915,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" @@ -5973,7 +5985,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)" @@ -6006,7 +6018,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ě" @@ -6086,756 +6098,756 @@ msgstr "Vytváření uživatele" msgid "Owner responsible for this part" msgstr "Vlastník odpovědný za tento díl" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Prodat více" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Měna použitá pro výpočet cen v mezipaměti" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimální cena kusovníku" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Minimální cena komponent dílu" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maximální cena kusovníku" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Maximální cena komponent dílu" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimální nákupní cena" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Minimální historická nákupní cena" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maximální nákupní cena" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Maximální historická nákupní cena" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimální interní cena" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Minimální cena závislá na množstevní slevě" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maximální interní cena" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Maximální cena závislá na množstevní slevě" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Minimální cena dodavatele" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Minimální cena dílu od externích dodavatelů" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Maximální cena dodavatele" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Maximální cena dílu od externích dodavatelů" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Minimální cena variant" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Vypočítané minimální náklady na varianty dílů" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Maximální cena variant" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Vypočítané maximální náklady na varianty dílů" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimální cena" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Přepsat minimální náklady" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maximální cena" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Přepsat maximální náklady" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Vypočítané minimální celkové náklady" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Vypočítané maximální celkové náklady" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Minimální prodejní cena" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Minimální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Maximální prodejní cena" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Maximální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Minimální prodejní cena" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Minimální historická prodejní cena" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Maximální prodejní cena" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Maximální historická prodejní cena" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Díl na inventuru" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Počet položek" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Počet jednotlivých položek zásob v době inventury" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Celkové dostupné zásoby v době inventury" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Datum provedení inventury" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Minimální cena zásob" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Odhadovaná minimální cena zásob k dispozici" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maximální cena zásob" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Odhadovaná maximální cena zásob k dispozici" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Částeční sleva v ceně" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Šablona testu položky" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Neplatný název šablony - musí obsahovat alespoň jeden alfanumerický znak" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Zkušební šablony lze vytvořit pouze pro testovatelné části" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Testovací šablona se stejným klíčem již existuje pro díl" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Název testu" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Zadejte název testu" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Testovací klíč" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Zjednodušený klíč pro testování" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Popis testu" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Zadejte popis pro tento test" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Je tento test povolen?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Požadováno" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Je tato zkouška vyžadována k projití?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Požadovaná hodnota" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Vyžaduje tato zkouška hodnotu při výpočtu výsledku zkoušky?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Vyžaduje přílohu" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vyžaduje tato zkouška soubor při přidání výsledku testu?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Platné volby pro tento test (oddělené čárkami)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "Položku kusovníku nelze změnit - sestava je uzamčena" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Položku kusovníku nelze změnit - varianta montáže je uzamčena" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Poddílec" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Vyberte díl které bude použit v kusovníku" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Kusovníkové množství pro tuto kusovníkovou položku" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Tato položka kusovníku je nepovinná" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Tento předmět kusovníku je spotřebovatelný (není sledován v objednávkách stavby)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Nastavit množství" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Dodatečné množství potřebné pro sestavení k vyúčtování ztráty nastavení" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Přirozené ztráty" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Odhadované přirozené ztráty pro stavbu, vyjádřeno v procentech (0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Zaokrouhlení více" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Zaokrouhlit požadované množství produkce na nejbližší násobek této hodnoty" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Reference položky kusovníku" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Poznámky k položce kusovníku" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Kontrolní součet" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Kontrolní součet řádku kusovníku" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Schváleno" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Tato položka kusovníku ještě nebyla schválena" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Se zdědí" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Tento kusovník se zdědí kusovníky pro varianty dílů" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Skladové položky pro varianty dílu lze použít pro tuto položku kusovníku" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Množství musí být celé číslo pro sledovatelné díly" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Poddíl musí být specifikován" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Náhradní položka kusovníku" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Náhradní díl nemůže být stejný jako hlavní díl" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Nadřazená položka kusovníku" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Náhradní díl" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Díl 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Díl 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Vyberte související díl" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Poznámka pro tento vztah" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Část vztahu nemůže být vytvořena mezi dílem samotným" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7639,7 +7651,7 @@ msgstr "Dodavatel, který funguje jako 'TME'" #: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 #: plugin/serializers.py:275 msgid "Only superuser accounts can administer plugins" -msgstr "" +msgstr "Pouze superuživatelské účty mohou spravovat pluginy" #: plugin/installer.py:243 msgid "Plugin installation is disabled" @@ -7647,11 +7659,11 @@ msgstr "Instalace pluginu je zakázana" #: plugin/installer.py:273 msgid "No package name or URL provided for installation" -msgstr "" +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 "" +msgstr "Neplatné znaky v názvu balíčku nebo v URL" #: plugin/installer.py:287 msgid "Installed plugin successfully" @@ -7758,7 +7770,7 @@ msgstr "Balíčkový plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Nebyl nalezen žádný autor" @@ -8172,7 +8184,7 @@ msgstr "Popis souboru aktiva" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "Uživatel musí být ověřen pro uložení šablon reportu" #: report/serializers.py:118 msgid "Select report template" @@ -8288,7 +8300,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" @@ -8323,15 +8335,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" @@ -8339,7 +8351,7 @@ 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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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é" @@ -8530,7 +8542,7 @@ msgstr "Výchozí ikona pro všechny lokace které nemají ikonu nastavenou (vol msgid "Stock Location" msgstr "Skladové umístění" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Skladová umístění" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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" @@ -8901,222 +8913,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" @@ -9582,115 +9594,119 @@ msgstr "Primární skupina" msgid "Primary group for the user" msgstr "Primární skupina uživatele" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Administrátor" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "Kusovník" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Zakoupené objednávky" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Prodejní objednávky" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" -msgstr "" +msgstr "Uživatel musí být autentizován" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" -msgstr "" +msgstr "Pouze superuživatel může vytvořit token pro jiného uživatele" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" -msgstr "" +msgstr "Administrátor" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" -msgstr "" +msgstr "Má tento uživatel administrativní oprávnění" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super-uživatel" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Je tento uživatel superuživatel" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Je tento uživatelský účet aktivní" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Pouze superuživatel může toto pole upravit" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Heslo" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Heslo uživatele" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Přepsat varování" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Přepsat varování o pravidlech pro heslo" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" -msgstr "" +msgstr "Personál" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" -msgstr "" +msgstr "Má tento uživatel oprávnění personálu" -#: users/serializers.py:461 +#: 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:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Váš účet byl vytvořen." -#: users/serializers.py:484 +#: 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:490 +#: 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 8dd82cb034..7c2c76c934 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Valgfri" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Sporet" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Produktionsordrer" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Kilde Lokation" @@ -861,16 +861,16 @@ msgstr "Produktions Status" msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Udstedt af" msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Ansvarlig" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link til ekstern URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Bygge Prioritet" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektkode" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Projektkode for denne byggeordre" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Antal" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Kilde lagervare" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Del Navn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "Indtast serienumre for bygge output" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk alloker serienumre" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Varen skal være på lager" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Stykliste Reference" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "Stykliste del ID" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Stykliste Del Navn" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tildelt Antal" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Stykliste Del" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Tilgængelig Lager" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Ingen plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Projekt Kode Label" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Bruger" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superbruger" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Er denne bruger en superbruger" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Er denne brugerkonto aktiv" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Kun en superbruger kan justere dette felt" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Adgangskode" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Brugers adgangskode" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Tilsidesæt advarsel" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Tilsidesæt advarslen om adgangskode regler" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: 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:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Din konto er oprettet." -#: users/serializers.py:484 +#: 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:490 +#: 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 ad951bf9b0..af696de318 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "Baum ausschließen" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Optional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Prüfbar" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Verbraucht" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Bauprodukt" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Bauaufträge" @@ -783,9 +783,9 @@ msgstr "Zieldatum muss nach dem Startdatum liegen" msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Quell-Lagerort" @@ -861,16 +861,16 @@ msgstr "Bauauftrags-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Aufgegeben von" msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Verantwortlicher Benutzer" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Externer Link" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektcode" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Fehler beim Abladen der Aufgabe, um die Build-Allokation abzuschließen" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build Ausgabe {serial} hat nicht alle erforderlichen Tests bestanden" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Bauauftragsposition" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ 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" msgstr "Anzahl" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Bauauftragsposition muss ein Endprodukt festlegen, da der übergeordnete Teil verfolgbar ist" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Installiere in" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Name des Teils" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Lagerort für Bauprodukt" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:498 +#: build/serializers.py:506 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:564 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "Alle Artikel" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "Unverfolgte Artikel" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "Verfolgte Artikel" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "Item-Typ" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "Elementtyp zur automatischen Zuweisung auswählen" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Stücklisten-Referenz" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "Stückliste Teil-ID" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Stückliste Teil-Name" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Zugewiesene Menge" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Teilkategorienname" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Nachverfolgbar" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Verfügbares Ersatzmaterial" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Verfügbarer Varianten Lagerbestand" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbrauchsmenge überschreitet die zugewiesene Menge" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "Optionale Notizen für den Bestandsverbrauch" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "Dupliziere Bauauftrag Artikelzuordnung" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Mindestens ein Element oder eine Zeile muss angegeben werden" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "Überfälliger Bauauftrag" msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Datei" -#: common/api.py:790 +#: 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:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Kein Plugin" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Benutzer" msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preis" @@ -1652,7 +1652,7 @@ msgstr "Name für diesen Webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Checkbox-Parameter können keine Einheiten haben" msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" @@ -2094,7 +2094,7 @@ msgstr "Checkbox" msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Auswahlmöglichkeiten" @@ -2106,7 +2106,7 @@ msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Aktiviert" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Vorlage" @@ -2148,7 +2148,7 @@ msgstr "Vorlage" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Wert" @@ -2156,18 +2156,18 @@ msgstr "Wert" msgid "Parameter Value" msgstr "Parameter Wert" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Optionales Notizfeld" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "Teile sind standardmäßig Vorlagen" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Fehlerberichte empfangen" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Benachrichtigungen bei Systemfehlern erhalten" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Zuletzt verwendete Druckmaschinen" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Die zuletzt benutzten Druckmaschinen für einen Benutzer speichern" @@ -3988,33 +3996,33 @@ msgstr "Teil ist aktiv" msgid "Manufacturer is Active" msgstr "Hersteller ist aktiv" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Lieferantenteil ist aktiv" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Internes Teil ist aktiv" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Teil auswählen" msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "Teil-URL des Zulieferers" msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Packmenge" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Gesamtmenge, die in einer einzelnen Packung geliefert wird. Für Einzelstücke leer lassen." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "Vielfache" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Bestellung" msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Internes Teil" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Bestell-Referenz" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Empfangen" msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Kontrolliert von" msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Lieferant" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Position" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Verkaufspreis-Währung" @@ -5732,71 +5744,71 @@ msgstr "Unterkategorien in der angegebenen Kategorie ausschließen" msgid "Has Results" msgstr "Ergebnisse" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Verwendet" @@ -5805,7 +5817,7 @@ msgstr "Verwendet" msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Teil-Kategorien" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Teile" @@ -5973,7 +5985,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)" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Erstellungs-Nutzer" msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ungültiger Vorlagenname - es muss mindestens ein alphanumerisches Zeichen enthalten sein" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Testvorlage mit demselben Schlüssel existiert bereits für Teil" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Benötigt" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Muss für diesen Test ein Wert für das Test-Ergebnis eingetragen werden?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Muss für diesen Test ein Anhang für das Test-Ergebnis hinzugefügt werden?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Diese Stücklisten-Position ist ein Verbrauchsartikel (sie wird nicht in Bauaufträgen verfolgt)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "überprüft" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Diese Stücklisten-Position wird in die Stücklisten von Teil-Varianten vererbt" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Bestand von Varianten kann für diese Stücklisten-Position verwendet werden" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Teil-Beziehung kann nicht zwischen einem Teil und sich selbst erstellt werden" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "Paket-Plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Kein Autor gefunden" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "Standardsymbol für alle Orte, die kein Icon gesetzt haben (optional)" msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Bestand-Lagerorte" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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" @@ -8901,222 +8913,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" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Admin" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Bestellungen" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Aufträge" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Administrator" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ist dieser Benutzer ein Administrator" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ist dieses Benutzerkonto aktiv" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Passwort" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ihr Konto wurde erstellt." -#: users/serializers.py:484 +#: 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:490 +#: 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 8aa6cceb62..bba720c3df 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "Σημειώσεις" @@ -215,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" @@ -269,7 +269,7 @@ msgstr "Μη έγκυρη επιλογή" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "Ένα σφάλμα έχει καταγραφεί από το διακο msgid "Image" msgstr "Εικόνα" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 είναι διαθέσιμη" @@ -561,21 +561,21 @@ msgstr "Κατάσταση παραγγελίας" msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "Συμπερίληψη παραλλαγών" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Κατηγορία" @@ -665,89 +665,89 @@ msgstr "Μέγιστη ημερομηνία" msgid "Exclude Tree" msgstr "Εξαίρεση δέντρου" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Συναρμολόγηση" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Υπό δοκιμή" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Εκκρεμής παραγγελία" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Καταναλωμένο" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "Σε παραγγελία" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Έξοδος" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Φιλτράρισμα με βάση το ID του αποθέματος εξόδου. Χρησιμοποιήστε 'null' για να βρείτε μη εγκατεστημένα στοιχεία κατασκευής" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" @@ -783,9 +783,9 @@ msgstr "Η ημερομηνία στόχος πρέπει να είναι μετ msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" @@ -861,16 +861,16 @@ msgstr "Κατάσταση Κατασκευής" msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "Ημερομηνία Δημιουργίας" @@ -907,120 +907,120 @@ msgstr "Εκδόθηκε από" msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Υπεύθυνος" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Προτεραιότητα Κατασκευής" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Κωδικός Έργου" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με ανοιχτές θυγατρικές κατασκευές" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με μη ολοκληρωμένα προϊόντα" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Αποτυχία εκχώρησης εργασίας για την ολοκλήρωση των κατανομών κατασκευής" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Δεν είναι δυνατή η μερική ολοκλήρωση προϊόντος κατασκευής με δεσμευμένα στοιχεία" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Γραμμή εντολής κατασκευής" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Αντικείμενο κατασκευής" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Ποσότητα" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Ποσότητα καταναλωμένου αποθέματος" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "Στοιχείο Αποθέματος" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Επίπεδο κατασκευής" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Όνομα Προϊόντος" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Τοποθεσία αποθέματος για την έξοδο κατασκευής" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "Κατανάλωση δεσμευμένου αποθέματος" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "Κατανάλωση οποιουδήποτε αποθέματος έχει ήδη δεσμευτεί για αυτή την κατασκευή" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "Η εντολή κατασκευής έχει ανοιχτές θυγατρικές εντολές κατασκευής" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "Η εντολή κατασκευής πρέπει να βρίσκεται σε κατάσταση παραγωγής" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής για την κατανομή ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Πρέπει να δοθούν στοιχεία κατανομής" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Τοποθεσία αποθέματος από την οποία θα ληφθούν τα Προϊόντα (αφήστε κενό για λήψη από οποιαδήποτε τοποθεσία)" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "Εξαίρεση τοποθεσίας" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Εξαιρέστε στοιχεία αποθέματος από αυτή την επιλεγμένη τοποθεσία" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Εναλλάξιμο απόθεμα" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Στοιχεία αποθέματος σε πολλές τοποθεσίες μπορούν να χρησιμοποιηθούν εναλλάξ" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "Εναλλακτικό απόθεμα" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Να επιτρέπεται η κατανομή εναλλακτικών Προϊόντων" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Προαιρετικά στοιχεία" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Κατανομή προαιρετικών στοιχείων BOM στην εντολή κατασκευής" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Αναφορά BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID Προϊόντος BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Όνομα Προϊόντος BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Δεσμευμένη ποσότητα" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Αναφορά κατασκευής" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Όνομα κατηγορίας Προϊόντος" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Ανιχνεύσιμο" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Στοιχείο BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Προγραμματισμένο για κατασκευή" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "Εξωτερικό απόθεμα" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Διαθέσιμο απόθεμα" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Διαθέσιμο εναλλακτικό απόθεμα" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Διαθέσιμο απόθεμα παραλλαγών" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "Η καταναλωμένη ποσότητα υπερβαίνει τη δεσμευμένη ποσότητα" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "Προαιρετικές σημειώσεις για την κατανάλωση αποθέματος" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "Το στοιχείο κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "Διπλή κατανομή στοιχείου κατασκευής" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "Η γραμμή κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "Διπλή κατανομή γραμμής κατασκευής" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Πρέπει να δοθεί τουλάχιστον ένα στοιχείο ή μία γραμμή" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "Εκπρόθεσμη εντολή κατασκευής" msgid "Build order {bo} is now overdue" msgstr "Η εντολή κατασκευής {bo} είναι πλέον εκπρόθεσμη" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Είναι σύνδεσμος" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Είναι αρχείο" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτά τα συνημμένα" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτό το συνημμένο" @@ -1550,7 +1550,7 @@ msgstr "Δεν δόθηκαν έγκυροι κωδικοί συναλλάγμα msgid "No plugin" msgstr "Χωρίς πρόσθετο" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Ετικέτα κωδικού έργου" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Χρήστης" msgid "Price break quantity" msgstr "Ποσότητα κλιμακωτής τιμής" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Τιμή" @@ -1652,7 +1652,7 @@ msgstr "Όνομα για αυτό το webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ενεργό" @@ -1849,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 "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο" @@ -2058,7 +2058,7 @@ msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να msgid "Checkbox parameters cannot have choices" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Οι επιλογές πρέπει να είναι μοναδικές" @@ -2094,7 +2094,7 @@ msgstr "Checkbox" msgid "Is this parameter a checkbox?" msgstr "Είναι αυτή η παράμετρος τύπου checkbox;" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Επιλογές" @@ -2106,7 +2106,7 @@ msgstr "Έγκυρες επιλογές για αυτή την παράμετρ msgid "Selection list for this parameter" msgstr "Λίστα επιλογών για αυτή την παράμετρο" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Ενεργό" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Πρότυπο" @@ -2148,7 +2148,7 @@ msgstr "Πρότυπο" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Δεδομένα" @@ -2156,18 +2156,18 @@ msgstr "Δεδομένα" msgid "Parameter Value" msgstr "Τιμή παραμέτρου" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Προαιρετικό πεδίο σημείωσης" @@ -2391,85 +2391,85 @@ 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 +#: 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 "Η λίστα επιλογών είναι κλειδωμένη" @@ -2859,8 +2859,8 @@ msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλο msgid "Parts can be assembled from other components by default" msgstr "Τα Προϊόντα μπορούν να συναρμολογούνται από άλλα συστατικά από προεπιλογή" -#: common/setting/system.py:489 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 "Συστατικό" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Ανενεργό: Η πλήρης διαδρομή κατηγορίας εμφανίζεται ως tooltip κατά το πέρασμα του δείκτη. Ενεργό: Η πλήρης διαδρομή κατηγορίας εμφανίζεται ως απλό κείμενο" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Λήψη αναφορών σφαλμάτων" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Λήψη ειδοποιήσεων για σφάλματα συστήματος" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Τελευταίες χρησιμοποιημένες εκτυπωτικές μηχανές" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Αποθήκευση των τελευταίων εκτυπωτικών μηχανών που χρησιμοποίησε ο χρήστης" @@ -3988,33 +3996,33 @@ msgstr "Το προϊόν είναι ενεργό" msgid "Manufacturer is Active" msgstr "Ο κατασκευαστής είναι ενεργός" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Το προϊόν προμηθευτή είναι ενεργό" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Το εσωτερικό προϊόν είναι ενεργό" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Ο προμηθευτής είναι ενεργός" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Διαθέτει απόθεμα" @@ -4195,7 +4203,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 "Προϊόν κατασκευαστή" @@ -4213,12 +4221,12 @@ msgstr "Επιλογή προϊόντος" msgid "Select manufacturer" msgstr "Επιλογή κατασκευαστή" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "Κωδικός προϊόντος κατασκευαστή" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "Κωδικός αποθέματος προμηθευτή" @@ -4282,16 +4290,16 @@ msgstr "URL εξωτερικού συνδέσμου προϊόντος προμ msgid "Supplier part description" msgstr "Περιγραφή προϊόντος προμηθευτή" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "βασικό κόστος" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Ποσότητα ανά συσκευασία" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Συνολική ποσότητα που παρέχεται σε μία συσκευασία. Αφήστε κενό για μεμονωμένα είδη." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "πολλαπλάσιο" @@ -4339,14 +4347,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 "Προέκυψε σφάλμα κατά την εξαγωγή δεδομένων" @@ -4451,67 +4463,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" @@ -4821,7 +4833,7 @@ msgstr "Παραγγελία" msgid "Order Complete" msgstr "Η παραγγελία ολοκληρώθηκε" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Εσωτερικό προϊόν" @@ -4918,7 +4930,7 @@ msgstr "Ημερομηνία έναρξης" msgid "Scheduled start date for this order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "Επιθυμητή Προθεσμία" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Αναφορά παραγγελίας" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Κατάσταση" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Παραλήφθηκε" msgid "Number of items received" msgstr "Αριθμός ειδών που παραλήφθηκαν" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Τιμή αγοράς" @@ -5211,8 +5223,8 @@ msgstr "Έλεγχος από" msgid "User who checked this shipment" msgstr "Χρήστης που έλεγξε αυτή την αποστολή" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "Αποστολή" @@ -5277,7 +5289,7 @@ msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερ msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος" @@ -5393,7 +5405,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 "Αντιγραφή παραμέτρων" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Όνομα προμηθευτή" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Η παραγγελία δεν είναι ανοικτή" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Αυτόματη τιμολόγηση" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Νόμισμα τιμής αγοράς" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Συγχώνευση ειδών" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Συγχώνευση ειδών με το ίδιο προϊόν, προορισμό και ημερομηνία στόχο σε μία γραμμή" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Εσωτερική ονομασία προϊόντος" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Πρέπει να καθοριστεί εντολή αγοράς" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Γραμμή" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Σαρωμένο barcode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Το barcode χρησιμοποιείται ήδη" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Πρέπει να δοθούν γραμμές" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Αποστολές" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Ολοκληρωμένες αποστολές" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Νόμισμα τιμής πώλησης" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Δεσμευμένα είδη" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Η ποσότητα πρέπει να είναι θετική" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Γραμμή εντολής επιστροφής" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Η γραμμή έχει ήδη παραληφθεί" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Ποσότητα προς επιστροφή" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Νόμισμα τιμής γραμμής" @@ -5732,71 +5744,71 @@ msgstr "Εξαίρεση υποκατηγοριών κάτω από την κα msgid "Has Results" msgstr "Έχει αποτελέσματα" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Είναι παραλλαγή" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Είναι αναθεώρηση" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Έχει αναθεωρήσεις" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "Έγκυρο BOM" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Κατηγορίες κατά κληρονομικότητα" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Αν είναι αληθές, συμπεριλαμβάνονται είδη σε θυγατρικές κατηγορίες της δοσμένης κατηγορίας" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Φιλτράρισμα κατά αριθμητικό ID κατηγορίας ή τη λέξη 'null'" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Το προϊόν συναρμολόγησης είναι υπό δοκιμή" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Το προϊόν Προϊόντος είναι υπό δοκιμή" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Χρήσεις" @@ -5805,7 +5817,7 @@ msgstr "Χρήσεις" msgid "Part Category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Κατηγορίες προϊόντων" @@ -5837,7 +5849,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 "Εικονίδιο (προαιρετικό)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Προϊόντα" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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 "Ελάχιστο απόθεμα" @@ -6086,756 +6098,756 @@ msgstr "Χρήστης δημιουργίας" msgid "Owner responsible for this part" msgstr "Ιδιοκτήτης υπεύθυνος για αυτό το προϊόν" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Πώληση πολλαπλάσιων" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Νόμισμα που χρησιμοποιείται για την προσωρινή αποθήκευση υπολογισμών τιμολόγησης" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Ελάχιστο κόστος BOM" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Ελάχιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Μέγιστο κόστος BOM" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Μέγιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Ελάχιστο κόστος αγοράς" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Ελάχιστο ιστορικό κόστος αγοράς" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Μέγιστο κόστος αγοράς" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Μέγιστο ιστορικό κόστος αγοράς" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Ελάχιστη εσωτερική τιμή" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Ελάχιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Μέγιστη εσωτερική τιμή" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Μέγιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Ελάχιστη τιμή προμηθευτή" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Ελάχιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Μέγιστη τιμή προμηθευτή" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Μέγιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Ελάχιστο κόστος παραλλαγής" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Υπολογισμένο ελάχιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Μέγιστο κόστος παραλλαγής" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Υπολογισμένο μέγιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Ελάχιστο κόστος" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Παράκαμψη ελάχιστου κόστους" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Μέγιστο κόστος" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Παράκαμψη μέγιστου κόστους" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Υπολογισμένο συνολικό ελάχιστο κόστος" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Υπολογισμένο συνολικό μέγιστο κόστος" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Ελάχιστη τιμή πώλησης" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Ελάχιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Μέγιστη τιμή πώλησης" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Μέγιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Ελάχιστο κόστος πώλησης" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Ελάχιστη ιστορική τιμή πώλησης" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Μέγιστο κόστος πώλησης" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Μέγιστη ιστορική τιμή πώλησης" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Προϊόν για απογραφή" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Αριθμός ειδών" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Αριθμός μεμονωμένων εγγραφών αποθέματος κατά τον χρόνο απογραφής" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Συνολικό διαθέσιμο απόθεμα κατά τον χρόνο απογραφής" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Ημερομηνία" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Ημερομηνία που πραγματοποιήθηκε η απογραφή" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Ελάχιστο κόστος αποθέματος" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Εκτιμώμενο ελάχιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Μέγιστο κόστος αποθέματος" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Εκτιμώμενο μέγιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Κλιμακωτή τιμή πώλησης προϊόντος" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Πρότυπο δοκιμής προϊόντος" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Μη έγκυρο όνομα προτύπου - πρέπει να περιλαμβάνει τουλάχιστον έναν αλφαριθμητικό χαρακτήρα" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Πρότυπα δοκιμών μπορούν να δημιουργηθούν μόνο για προϊόντα που είναι υπό δοκιμή" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Υπάρχει ήδη πρότυπο δοκιμής με το ίδιο κλειδί για το προϊόν" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Όνομα δοκιμής" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Εισαγάγετε όνομα για τη δοκιμή" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Κλειδί δοκιμής" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Απλοποιημένο κλειδί για τη δοκιμή" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Περιγραφή δοκιμής" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Εισαγάγετε περιγραφή για αυτή τη δοκιμή" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Είναι αυτή η δοκιμή ενεργή;" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Απαραίτητη" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Απαιτείται η επιτυχής ολοκλήρωση αυτής της δοκιμής;" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Απαιτεί τιμή" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή τιμή κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Απαιτεί συνημμένο" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή συνημμένο αρχείο κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή τη δοκιμή (διαχωρισμένες με κόμμα)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση είναι κλειδωμένη" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση παραλλαγής είναι κλειδωμένη" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Επιλέξτε γονικό προϊόν" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Υποπροϊόν" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Επιλέξτε προϊόν που θα χρησιμοποιηθεί στο BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Ποσότητα BOM για αυτό το στοιχείο BOM" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Αυτό το στοιχείο BOM είναι προαιρετικό" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Αυτό το στοιχείο BOM είναι αναλώσιμο (δεν παρακολουθείται στις εντολές παραγωγής)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Ποσότητα ρύθμισης" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Επιπλέον απαιτούμενη ποσότητα για μια παραγωγή, για να ληφθούν υπόψη οι απώλειες ρύθμισης" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Φθορά" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Εκτιμώμενη φθορά για μια παραγωγή, εκφρασμένη ως ποσοστό (0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Πολλαπλάσιο στρογγυλοποίησης" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Στρογγυλοποίηση προς τα πάνω της απαιτούμενης ποσότητας παραγωγής στο πλησιέστερο πολλαπλάσιο αυτής της τιμής" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Αναφορά στοιχείου BOM" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Σημειώσεις στοιχείου BOM" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Άθροισμα ελέγχου" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Άθροισμα ελέγχου γραμμής BOM" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Επικυρωμένο" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Αυτό το στοιχείο BOM έχει επικυρωθεί" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Κληρονομείται" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Αυτό το στοιχείο BOM κληρονομείται από τα BOM για προϊόντα παραλλαγών" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Είδη αποθέματος για προϊόντα παραλλαγών μπορούν να χρησιμοποιηθούν για αυτό το στοιχείο BOM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Η ποσότητα πρέπει να είναι ακέραια τιμή για προϊόντα με ιχνηλάτηση" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Πρέπει να καθοριστεί υποπροϊόν" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Εναλλακτικό στοιχείο BOM" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Το εναλλακτικό προϊόν δεν μπορεί να είναι το ίδιο με το κύριο προϊόν" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Γονικό στοιχείο BOM" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Εναλλακτικό προϊόν" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Προϊόν 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Προϊόν 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Επιλέξτε σχετικό προϊόν" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Σημείωση για αυτή τη σχέση" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊόντος μεταξύ ενός προϊόντος και του εαυτού του" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "Πρόσθετο πακέτου" msgid "Plugin" msgstr "Πρόσθετο" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Δεν βρέθηκε δημιουργός" @@ -8288,7 +8300,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 "Εγκατεστημένα είδη" @@ -8361,7 +8373,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 "Γονική τοποθεσία" @@ -8445,7 +8457,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 "Παλαιωμένο" @@ -8530,7 +8542,7 @@ msgstr "Προεπιλεγμένο εικονίδιο για όλες τις τ msgid "Stock Location" msgstr "Τοποθεσία αποθέματος" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Τοποθεσίες αποθέματος" @@ -8579,7 +8591,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 "Δεν μπορεί να δημιουργηθεί είδος αποθέματος για εικονικά προϊόντα" @@ -8624,7 +8636,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 "Συσκευασία στην οποία αποθηκεύεται αυτό το είδος αποθέματος" @@ -8640,7 +8652,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 "Κωδικός παρτίδας για αυτό το είδος αποθέματος" @@ -8753,7 +8765,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 "Διπλότυπα είδη αποθέματος" @@ -8877,7 +8889,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 "Πρότυπο δοκιμής για αυτό το αποτέλεσμα" @@ -8901,222 +8913,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 "Προηγούμενος σειριακός αριθμός" @@ -9582,115 +9594,119 @@ msgstr "Κύρια ομάδα" msgid "Primary group for the user" msgstr "Κύρια ομάδα του χρήστη" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Διαχειριστής" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Εντολές Αγοράς" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Εντολές Πώλησης" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Υπερχρήστης" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Είναι ο χρήστης υπερχρήστης;" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Είναι ο λογαριασμός χρήστη ενεργός;" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Μόνο υπερχρήστης μπορεί να τροποποιήσει αυτό το πεδίο" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Κωδικός πρόσβασης" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Κωδικός πρόσβασης του χρήστη" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Παράβλεψη προειδοποίησης" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Παράβλεψη της προειδοποίησης σχετικά με τους κανόνες κωδικού πρόσβασης" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Δεν έχετε δικαίωμα δημιουργίας χρηστών" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ο λογαριασμός σας δημιουργήθηκε." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" -#: users/serializers.py:490 +#: 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 4a5c3ee85b..5aea72b2ec 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-11 10:22+0000\n" +"POT-Creation-Date: 2026-05-03 02:20+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "" @@ -216,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 "" @@ -270,7 +270,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -337,51 +337,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -537,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 "" @@ -562,21 +562,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -586,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 @@ -596,9 +596,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -666,89 +666,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -784,9 +784,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -814,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:1093 msgid "Source Location" msgstr "" @@ -862,16 +862,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -908,120 +908,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1033,445 +1033,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1495,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" @@ -1519,19 +1519,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1551,7 +1551,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1618,7 +1618,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1629,7 +1629,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1653,7 +1653,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1850,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 "" @@ -2059,7 +2059,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2095,7 +2095,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2107,7 +2107,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2127,7 +2127,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2141,7 +2141,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2149,7 +2149,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2157,18 +2157,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2392,85 +2392,85 @@ 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 +#: 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 "" @@ -2860,8 +2860,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3929,18 +3929,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3989,33 +3997,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4196,7 +4204,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 "" @@ -4214,12 +4222,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4243,8 +4251,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:666 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 @@ -4255,7 +4263,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 "" @@ -4283,16 +4291,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4316,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4340,14 +4348,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 "" @@ -4452,67 +4464,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 "" @@ -4822,7 +4834,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4919,7 +4931,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4957,7 +4969,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5014,7 +5026,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5140,7 +5152,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5212,8 +5224,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5278,7 +5290,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5394,7 +5406,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 "" @@ -5413,216 +5425,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5733,71 +5745,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5806,7 +5818,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5838,7 +5850,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 "" @@ -5859,7 +5871,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:29 msgid "Parts" msgstr "" @@ -5974,7 +5986,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 "" @@ -6007,7 +6019,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 "" @@ -6087,756 +6099,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7759,7 +7771,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8289,7 +8301,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 "" @@ -8362,7 +8374,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 "" @@ -8446,7 +8458,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 "" @@ -8531,7 +8543,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8580,7 +8592,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 "" @@ -8625,7 +8637,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 "" @@ -8641,7 +8653,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 "" @@ -8754,7 +8766,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 "" @@ -8878,7 +8890,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 "" @@ -8902,222 +8914,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 "" @@ -9583,114 +9595,118 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 bec0242164..93a544c8b5 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -665,89 +665,89 @@ msgstr "Fecha Máxima" msgid "Exclude Tree" msgstr "Excluir Árbol" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Comprobable" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Agotado" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Salida" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Construir órdenes" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Ubicación de la fuente" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Responsable" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Link externo" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "El pedido {build} ha sido procesado" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Cantidad" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 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:249 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:268 build/serializers.py:317 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:339 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 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:824 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:827 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:830 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 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:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1097 +#: build/serializers.py:1105 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:1110 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:790 +#: 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:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Precio" @@ -1652,7 +1652,7 @@ msgstr "Nombre para este webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Casilla de verificación" msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Opciones" @@ -2106,7 +2106,7 @@ msgstr "Opciones válidas para este parámetro (separados por comas)" msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" @@ -2148,7 +2148,7 @@ msgstr "Plantilla" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Datos" @@ -2156,18 +2156,18 @@ msgstr "Datos" msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Las partes son plantillas por defecto" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Recibir reportes de error" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Recibir notificación de errores del sistema" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Últimas impresoras usadas" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "La parte está activa" msgid "Manufacturer is Active" msgstr "El fabricante está activo" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Tiene Stock" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Cantidad de paquete" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiple" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Orden" msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Componente interno" @@ -4918,7 +4930,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:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Referencia del pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Estado" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Recibido" msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Revisado por" msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "La cantidad de asignación no puede exceder la cantidad de stock" msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: 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:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:988 +#: 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:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1710 order/serializers.py:1830 +#: 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:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: 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:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Categoría de parte" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Categorías de parte" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Partes" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Creación de Usuario" msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Fecha" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Requerido" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Validado" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "No se encontró autor" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "Ubicación de Stock" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Ubicaciones de Stock" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Ordenes de compra" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Órdenes de venta" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:484 +#: 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:490 +#: 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 12e3a63eac..b5c7c06e59 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-05-03 02:23\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Consumible" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Comprobable" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Construir órdenes" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Ubicación de la fuente" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Responsable" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Link externo" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "El pedido {build} ha sido procesado" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Cantidad" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 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:249 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:268 build/serializers.py:317 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:339 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 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:824 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:827 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:830 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 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:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:991 +#: build/serializers.py:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1097 +#: build/serializers.py:1105 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:1110 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:790 +#: 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:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Precio" @@ -1652,7 +1652,7 @@ msgstr "Nombre para este webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Casilla de verificación" msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Opciones" @@ -2106,7 +2106,7 @@ msgstr "Opciones válidas para este parámetro (separados por comas)" msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" @@ -2148,7 +2148,7 @@ msgstr "Plantilla" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Datos" @@ -2156,18 +2156,18 @@ msgstr "Datos" msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Las partes son plantillas por defecto" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Recibir reportes de error" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Recibir notificación de errores del sistema" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Últimas impresoras usadas" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Tiene existencias" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Cantidad de paquete" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiple" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Orden" msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Componente interno" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Referencia del pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Estado" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Recibido" msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Revisado por" msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "La cantidad de asignación no puede exceder la cantidad de stock" msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: 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:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:988 +#: 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:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1710 order/serializers.py:1830 +#: 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:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: 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:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Categoría de parte" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Categorías de parte" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Partes" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Creación de Usuario" msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Fecha" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Requerido" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Validado" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "No se encontró autor" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "Ubicación de Stock" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Ubicaciones de Stock" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Ordenes de compra" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Órdenes de venta" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:484 +#: 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:490 +#: 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 9c0f2fd393..0c58f7e8e2 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Pilt" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Valikuline" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Jälgitud" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "Koostamise olek" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Kogus" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Osa nimi" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Valikained" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Jälgitav" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Saadaval laos" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "On link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "On fail" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Pluginat pole" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mall" @@ -2148,7 +2148,7 @@ msgstr "Mall" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Andmed" @@ -2156,18 +2156,18 @@ msgstr "Andmed" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Laos" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Staatus" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Vöötkood" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skännitud ribakood" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Saadetised" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Järgmised seerianumbrid ei ole saadaval" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Osa kategooria" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Osa kategooriad" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Osad" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Testimalle saab luua ainult testitavate osade jaoks" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "Paki plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Autorit ei leitud" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Admin" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 a3dd6f0e68..b9cf4f8fef 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "یادداشت" @@ -215,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 "ایمیل" @@ -269,7 +269,7 @@ msgstr "انتخاب نامعتبر" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "یک خطا توسط سرور ثبت شده است." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "وضعیت سفارش" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "دسته" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "اختیاری" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "مونتاژ" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "سفارش معوق" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "اختصاص داده شده" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "سفارش‌های ساخت" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "منبع محل" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "صادر شده توسط" msgid "User who issued this build order" msgstr "کاربری که این سفارش ساخت را صادر کرده است" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "پیوند خارجی" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 27dacfa79c..b2bb175db0 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Kuva" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Linkki ulkoiseen URLiin" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Määrä" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Seurattavissa" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Käyttäjä" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Hinta" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiivinen" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Käytössä" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Tilauksen viite" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Tila" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Vastaanotettu" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 d209872183..d432eecce2 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Catégorie" @@ -665,89 +665,89 @@ msgstr "Date maximale" msgid "Exclude Tree" msgstr "Exclure l'arbre" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Consommable" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Facultatif" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Suivi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testable" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Allouée" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Consommé" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Sortie" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrer par l'identifiant (ID) des articles du stock de sortie. Utilisez 'null' pour trouver les éléments de fabrication non installés." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Ordres de Fabrication" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Emplacement d'origine" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Émis par" msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Responsable" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Lien vers une url externe" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Code du projet" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Impossible de terminer l'ordre de fabrication avec des constructions enfant ouvertes" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossible de terminer l'ordre de fabrication avec des sorties incomplètes" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Échec du déchargement de la tâche pour terminer les allocations de construction" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Les numéros de série doivent être fournis pour les pièces traçables" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La sortie de compilation {serial} n'a pas réussi tous les tests requis" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "Les articles en stock alloués sont toujours en production" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Impossible de compléter partiellement une sortie de construction avec les éléments alloués" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Poste de l'ordre de construction" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Création de l'objet" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Quantité" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Quantité de stock consommé" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'élément de construction doit spécifier une sortie de construction, la pièce maîtresse étant marquée comme objet traçable" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "L'article de stock sélectionné ne correspond pas à la ligne BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Installer dans" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Niveau de construction" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Nom de l'article" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 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:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Emplacement de stock pour la sortie de la fabrication" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Consommation du stock alloué" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 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:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 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:824 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:827 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:830 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1097 +#: build/serializers.py:1105 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:1110 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Référence de la nomenclature" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID de la pièce de la nomenclature" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Nomenclature Nom de la pièce" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantité allouée" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Référence de construction" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Nom de la catégorie de pièces" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Traçable" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stock disponible" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Stock de substitution disponible" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Stock de variantes disponibles" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantité consommée dépasse la quantité allouée" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "Note optionnelle pour la consommation du stock" -#: build/serializers.py:1783 +#: build/serializers.py:1807 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:1812 msgid "Duplicate build item allocation" msgstr "Dupliquer l'allocation de l'article de fabrication" -#: build/serializers.py:1806 +#: build/serializers.py:1830 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:1835 msgid "Duplicate build line allocation" msgstr "Dupliquer l'allocation de ligne de fabrication" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Au moins un élément ou une ligne doit être fourni" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "C'est un lien" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "C'est un fichier" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: 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" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Utilisateur" msgid "Price break quantity" msgstr "Quantité de rupture de prix" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Prix" @@ -1652,7 +1652,7 @@ msgstr "Nom de ce webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actif" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Les paramètres des cases à cocher ne peuvent pas avoir d'unités" msgid "Checkbox parameters cannot have choices" msgstr "Les paramètres des cases à cocher ne peuvent pas comporter de choix" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Les choix doivent être uniques" @@ -2094,7 +2094,7 @@ msgstr "Case à cocher" msgid "Is this parameter a checkbox?" msgstr "Ce paramètre est-il une case à cocher ?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Choix" @@ -2106,7 +2106,7 @@ msgstr "Choix valables pour ce paramètre (séparés par des virgules)" msgid "Selection list for this parameter" msgstr "Liste de sélection pour ce paramètre" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Activé" @@ -2126,7 +2126,7 @@ msgstr "Paramètres" msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2752 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" @@ -2140,7 +2140,7 @@ msgstr "ID du modèle cible pour ce paramètre" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modèle" @@ -2148,7 +2148,7 @@ msgstr "Modèle" msgid "Parameter template" msgstr "Modèle de paramètre" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Données" @@ -2156,18 +2156,18 @@ msgstr "Données" msgid "Parameter Value" msgstr "Valeur du paramètre" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Champ de notes facultatif" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Les pièces sont des templates par défaut" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Désactivé : Le chemin de la catégorie complète est affiché comme un info-bulle de survol. Activé : Le chemin de la catégorie complète est affiché en texte brut." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Recevoir des rapports d'erreur" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Recevoir des notifications en cas d'erreurs du système" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Dernières machines d'impression utilisées" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Sauvegarder les dernières machines d'impression utilisées par un utilisateur" @@ -3988,33 +3996,33 @@ msgstr "La pièce est active" msgid "Manufacturer is Active" msgstr "Le fabricant est actif" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Le fournisseur de la pièce est active" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "La pièce interne est active" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "A du stock" @@ -4195,7 +4203,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" @@ -4213,12 +4221,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:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "Lien de la pièce du fournisseur externe" msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "coût de base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Nombre de paquet" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantité totale fournie dans un emballage unique. Laisser vide pour les articles individuels." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "plusieurs" @@ -4339,14 +4347,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" @@ -4451,67 +4463,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" @@ -4821,7 +4833,7 @@ msgstr "Commande" msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Pièces Internes" @@ -4918,7 +4930,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:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Référence de la commande" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "État" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Reçu" msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Vérifié par" msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: order/models.py:2602 order/serializers.py:1568 +#: 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é" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nom du fournisseur" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "La commande comporte des postes incomplets" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Tarification automobile" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Fusionner des éléments" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nom de la pièce interne" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "La pièce du fournisseur doit être spécifiée" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Le bon de commande doit être spécifié" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Le fournisseur doit correspondre au bon de commande" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Le bon de commande doit correspondre au fournisseur" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Poste" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: 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:837 +#: 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:847 +#: 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:855 order/serializers.py:2037 +#: 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:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Code-barres scanné" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Les postes doivent être fournis" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "L'emplacement de la destination doit être spécifié" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Les valeurs de code-barres fournies doivent être uniques" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Envois" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envois terminés" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Lignes allouées" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Postes alloués" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Aucun détail sur l'expédition n'est fourni" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La quantité doit être positive" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1710 order/serializers.py:1830 +#: 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:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Les numéros de série suivants sont indisponibles" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Poste de commande de retour" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Le poste a déjà été reçu" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Quantité à retourner" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Devise du prix de la ligne" @@ -5732,71 +5744,71 @@ msgstr "Exclure les sous-catégories de la catégorie spécifiée" msgid "Has Results" msgstr "A des résultats" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Est variante" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Est la révision" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "A des révisions" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "Nomenclature valide" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Catégories en cascade" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Si vrai, inclure des éléments dans les sous-catégories de la catégorie donnée" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrer par ID de catégorie numérique ou par 'null'" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "La pièce d'assemblage est active" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "La pièce d'assemblage est traçable" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "La pièce d'assemblage est testable" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Le composant est testable" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Utilise" @@ -5805,7 +5817,7 @@ msgstr "Utilise" msgid "Part Category" msgstr "Catégorie de composant" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Catégories de composants" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Pièces" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Création Utilisateur" msgid "Owner responsible for this part" msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Devise utilisée pour cacher les calculs de prix" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Coût minimum de la nomenclature" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Coût minimal des composants" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Coût maximal de la nomenclature" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Coût maximal des composants" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Coût d'achat minimum" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Coût d'achat historique minimum" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Coût d'achat maximum" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Coût d'achat historique maximum" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Prix interne minimum" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Coût minimum basé sur des ruptures de prix internes" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Prix interne maximum" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Coût maximum basé sur les écarts de prix internes" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Prix minimum du fournisseur" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Prix minimum des pièces provenant de fournisseurs externes" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Prix maximum du fournisseur" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Prix maximum des pièces provenant de fournisseurs externes" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Coût minimum de la variante" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Calcul du coût minimum des pièces de la variante" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Coût maximal de la variante" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Calcul du coût maximal des pièces de la variante" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Coût minimal" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Remplacer le coût minimum" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Coût maximal" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Dépassement du coût maximal" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Calcul du coût minimum global" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Calcul du coût maximum global" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Prix de vente minimum" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Prix de vente minimum basé sur des ruptures de prix" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Prix de vente maximum" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Prix de vente maximum en fonction des écarts de prix" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Coût minimum de vente" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Prix de vente historique minimum" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Coût de vente maximum" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Prix de vente historique maximum" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Partie pour l'inventaire" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Nombre d'articles" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Nombre d'entrées individuelles au moment de l'inventaire" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Stock total disponible au moment de l'inventaire" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Date" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Date de l'inventaire" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Coût minimum du stock" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Coût minimum estimé des stocks disponibles" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Coût maximal du stock" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Coût maximum estimé des stocks disponibles" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Vente de pièces détachées Prix cassé" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Modèle de test partiel" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Le nom du modèle n'est pas valide - il doit comporter au moins un caractère alphanumérique" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Les modèles de test ne peuvent être créés que pour les parties testables" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Un modèle de test avec la même clé existe déjà pour la partie" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Entrez un nom pour le test" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Clé de test" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Clé simplifiée pour le test" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Description du test" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Saisir la description de ce test" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Ce test est-il activé ?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Requis" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Ce test est-il obligatoire pour passer l'examen ?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Ce test nécessite-t-il une valeur lors de l'ajout d'un résultat de test ?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Nécessite une pièce jointe" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ce test nécessite-t-il un fichier joint lors de l'ajout d'un résultat de test ?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Choix valables pour ce test (séparés par des virgules)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'article de nomenclature ne peut pas être modifié - l'assemblage est verrouillé" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Le poste de nomenclature ne peut pas être modifié - l'assemblage de la variante est verrouillé" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Sélectionner la partie parentale" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Sous-partie" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Sélectionner la pièce à utiliser dans la nomenclature" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Quantité de nomenclature pour ce poste de nomenclature" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Ce poste de nomenclature est facultatif" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ce poste de nomenclature est consommable (il n'est pas suivi dans les ordres de fabrication)." -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Définir la quantité" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Attrition" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Attrition estimée pour cette fabrication, exprimée en pourcentage (0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Arrondi au multiple" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrondir la quantité de production requise au multiple le plus proche de cette valeur" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Référence du poste de nomenclature" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Notes sur les postes de nomenclature" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Somme de contrôle" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Somme de contrôle de la ligne de nomenclature" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Validée" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Ce poste de nomenclature a été validé" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Obtient l'héritage" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ce poste de nomenclature est hérité des nomenclatures des composants variants" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Les postes de stock pour les composants variants peuvent être utilisés pour ce poste de nomenclature" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantité doit être un nombre entier pour les pièces pouvant être suivies" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "La sous-partie doit être spécifiée" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Remplacement d'un poste de nomenclature" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "La pièce de remplacement ne peut pas être identique à la pièce maîtresse" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Poste de nomenclature parent" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Pièce de rechange" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Première partie" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Partie 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Sélectionner une partie connexe" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Note pour cette relation" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Il n'est pas possible de créer une relation entre une pièce et elle-même" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "Plugin Package" msgid "Plugin" msgstr "Extension" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Aucun auteur trouvé" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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é" @@ -8530,7 +8542,7 @@ msgstr "Icône par défaut pour tous les lieux qui n'ont pas d'icône (facultati msgid "Stock Location" msgstr "Emplacement du stock" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Emplacement des stocks" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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" @@ -8901,222 +8913,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" @@ -9582,115 +9594,119 @@ msgstr "Groupe primaire" msgid "Primary group for the user" msgstr "Groupe principal de l'utilisateur" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Administrateur" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Bons de commande" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Ventes" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super-utilisateur" -#: users/serializers.py:328 users/serializers.py:418 +#: 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:332 users/serializers.py:425 +#: 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:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Seul un superutilisateur peut modifier ce champ" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Mot de passe" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Mot de passe pour l'utilisateur" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: 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:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: 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:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Votre compte a été créé." -#: users/serializers.py:484 +#: 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:490 +#: 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 71eaa7ef26..054ba2a24f 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "" @@ -215,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 "אימייל" @@ -269,7 +269,7 @@ msgstr "בחירה שגויה" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "נרשמה שגיאה על ידי השרת." msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "מקור הבנייה" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "קישור חיצוני" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "כמות" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "משתמש" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 7ff7a8925b..0f02dcb7e4 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "" @@ -215,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 "ई-मेल" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 07e816734e..f9062fc13f 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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ő" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategória" @@ -665,89 +665,89 @@ msgstr "Eddig a dátumig" msgid "Exclude Tree" msgstr "Fa kihagyása" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opcionális" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Követett" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Ellenőrizhető" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Felhasználva" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "Gyártás nem található" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Kimenet" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Szűrés a kimeneti készlet tétel azonosítójára. Használj 'null'-t ha a be nem épített gyártási tételeket keresed." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Gyártási utasítások" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Forrás hely" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Indította" msgid "User who issued this build order" msgstr "Felhasználó aki ezt a gyártási utasítást kiállította" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Felelős" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Felhasználó vagy csoport aki felelős ezért a gyártásért" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Külső link" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link külső URL-re" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektszám" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "A gyártási rendelés nem befejezhető amíg nyitott al-gyártások vannak" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "A gyártási rendelés nem befejezhető amíg hiányos a kimenet" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "A gyártási foglalások teljesítése háttérfeladat elvégzése nem sikerült" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "A {build} gyártási utasítás elkészült" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Egyedi követésre jelölt alkatrészeknél kötelező sorozatszámot megadni" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A {serial} gyártási kimenet nem felelt meg az összes kötelező teszten" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "A lefoglalt készletelemek még gyártás alatt vannak" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Nem lehet részben befejezni egy építési kimenetet lefoglalt tételekkel" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Gyártási Rendelés Sor Tétel" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,446 +1032,446 @@ msgstr "Gyártás objektum" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Mennyiség" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Felhasznált készlet mennyisége" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gyártási tételnek meg kell adnia a gyártási kimenetet, mivel a fő darab egyedi követésre kötelezett" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "A lefoglalt mennyiségnek nullánál nagyobbnak kell lennie" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Gyártási Szint" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Alkatrész neve" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 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:249 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:268 build/serializers.py:317 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:339 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:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Legyártott készlet helye" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:727 +#: build/serializers.py:735 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:762 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 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:781 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 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:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 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:824 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:827 msgid "Build order must be in production state" msgstr "A Gyártásnak folyamatban kell lennie" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 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:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1097 +#: build/serializers.py:1105 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:1110 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "Összes elem" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "Nem követett tételek" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "Követett tételek" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "Tétel típusa" -#: build/serializers.py:1126 +#: build/serializers.py:1134 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:1188 msgid "BOM Reference" msgstr "Alkatrészjegyzék Hivatkozás" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "Alkatrészjegyzék Cikk Azonosító" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Alkatrészjegyzék Alkatrész Név" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "Beépítés helye" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Lefoglalt mennyiség" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Gyártási Hivatkozás" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Alkatrész kategória Neve" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Követésre kötelezett" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Elérhető Helyettesítő Készlet" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Elérhető Készlet Változatokból" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "Felhasznált mennyiség meghaladja a lefoglalt mennyiséget" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "Megjegyzés a készletfelhasználáshoz" -#: build/serializers.py:1783 +#: build/serializers.py:1807 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:1812 msgid "Duplicate build item allocation" msgstr "Dupla gyártási tétel lefoglalás" -#: build/serializers.py:1806 +#: build/serializers.py:1830 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:1835 msgid "Duplicate build line allocation" msgstr "Duplikált gyártási sor foglalás" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Legalább egy tétel vagy sor megadása kötelező" @@ -1495,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" @@ -1519,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "Ez egy hivatkozás" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Ez egy állomány" -#: common/api.py:790 +#: 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:803 +#: 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" @@ -1551,7 +1551,7 @@ 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" @@ -1618,7 +1618,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1629,7 +1629,7 @@ msgstr "Felhasználó" msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Ár" @@ -1653,7 +1653,7 @@ msgstr "Webhook neve" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktív" @@ -1850,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" @@ -2059,7 +2059,7 @@ msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" @@ -2095,7 +2095,7 @@ msgstr "Jelölőnégyzet" msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Lehetőségek" @@ -2107,7 +2107,7 @@ msgstr "Választható lehetőségek (vesszővel elválasztva)" msgid "Selection list for this parameter" msgstr "A paraméter választéklistája" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Engedélyezve" @@ -2127,7 +2127,7 @@ msgstr "Paraméterek" msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2752 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" @@ -2141,7 +2141,7 @@ msgstr "A célmodell azonosítója ehhez a paraméterhez" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Sablon" @@ -2149,7 +2149,7 @@ msgstr "Sablon" msgid "Parameter template" msgstr "Paraméter sablon" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Adat" @@ -2157,18 +2157,18 @@ msgstr "Adat" msgid "Parameter Value" msgstr "Paraméter értéke" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" @@ -2392,85 +2392,85 @@ 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 +#: 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" @@ -2860,8 +2860,8 @@ msgstr "Alkatrészek alapból sablon alkatrészek legyenek" 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:489 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ő" @@ -3929,18 +3929,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Letiltva: A teljes kategória elérési út megjelenik tooltipként. Engedélyezve: A teljes kategória elérési út megjelenik szövegként." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Hibariportok fogadása" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Értesítések fogadása a rendszerhibákról" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Utoljára használt nyomtató gépek" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Az utoljára használt nyomtató tárolása a felhasználóhoz" @@ -3989,33 +3997,33 @@ msgstr "Az alkatrész aktív" msgid "Manufacturer is Active" msgstr "A Gyártó Aktív" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "A Szállítói Alkatrész Aktív" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "A saját alkatrész Aktív" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Van készleten" @@ -4196,7 +4204,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" @@ -4214,12 +4222,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:705 -#: 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" @@ -4243,8 +4251,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:666 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 @@ -4255,7 +4263,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" @@ -4283,16 +4291,16 @@ msgstr "URL link a beszállítói alkatrészhez" msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "alap költség" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 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:846 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,7 +4316,7 @@ msgstr "Csomagolási mennyiség" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Egy csomagban kiszállítható mennyiség, hagyd üresen az egyedi tételeknél." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "többszörös" @@ -4340,14 +4348,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" @@ -4452,67 +4464,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" @@ -4822,7 +4834,7 @@ msgstr "Rendelés" msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Belső alkatrész" @@ -4919,7 +4931,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:1842 order/serializers.py:295 +#: 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" @@ -4957,7 +4969,7 @@ msgid "Order reference" msgstr "Rendelés azonosító" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Állapot" @@ -5014,7 +5026,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5140,7 +5152,7 @@ msgstr "Beérkezett" msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:2008 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" @@ -5212,8 +5224,8 @@ msgstr "Ellenőrizte" msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5278,7 +5290,7 @@ msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5394,7 +5406,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" @@ -5413,216 +5425,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Beszállító neve" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: 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:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Belső cikkszám" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:747 +#: 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:748 +#: 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:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: 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:837 +#: 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:847 +#: 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:855 order/serializers.py:2037 +#: 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:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Szállítások" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Foglalt tételek" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1710 order/serializers.py:1830 +#: 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:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Az alábbi sorozatszámok nem elérhetők" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Visszaküldési mennyiség" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Sortétel pénzneme" @@ -5733,71 +5745,71 @@ msgstr "Az adott kategória alkategóriáinak kihagyása" msgid "Has Results" msgstr "Van találat" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Változat-e" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Változat" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Vannak Változatok" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Kaszkád Kategóriák" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Ha igaz, tartalmazza az adott kategória alkategóriáiban lévő tételeket" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Szűrés numerikus kategória azonosító vagy a 'null' literál szerint" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Összeállított Alkatrész ellenőrizhető" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Összetevő alkatrész ellenőrizhető" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Használ" @@ -5806,7 +5818,7 @@ msgstr "Használ" msgid "Part Category" msgstr "Alkatrész kategória" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Alkatrész kategóriák" @@ -5838,7 +5850,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)" @@ -5859,7 +5871,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:29 msgid "Parts" msgstr "Alkatrészek" @@ -5974,7 +5986,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)" @@ -6007,7 +6019,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" @@ -6087,756 +6099,756 @@ msgstr "Létrehozó" msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Dátum" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Alkatrész értékesítési ársáv" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Alkatrész Teszt Sablon" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Hibás sablon név - legalább egy alfanumerikus karakter kötelező" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Teszt sablont csak ellenőrizhetőre beállított alkatrészhez lehet csinálni" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Már létezik ilyen azonosítójú Teszt sablon ehhez az alkatrészhez" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Teszt azonosító" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Teszt engedélyezve?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Kötelező" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően érték legyen rendelve?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően fájl melléklet legyen rendelve?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Választható lehetőségek ehhez a Teszthez (vesszővel elválasztva)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás le van zárva" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás változat le van zárva" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ez az alkatrészjegyzék tétel fogyóeszköz (készlete nincs követve a gyártásban)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Beállítás mennyiség" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "A gyártáshoz szükséges extra mennyiség, a beállási veszteséggel együtt" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Veszteség" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Becsült veszteség egy gyártásnál, százalékban kifejezve (0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Kerekítési többszörös" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "A szükséges termelési mennyiség az érték legközelebbi többszöröséhez kerekítése" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ezt az alkatrészjegyzék tételt az alkatrész változatok alkatrészjegyzékei is öröklik" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Alkatrészváltozatok készlet tételei használhatók ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "A mennyiség egész szám kell legyen a követésre kötelezett alkatrészek esetén" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "A helyettesítő alkatrész nem lehet ugyanaz mint a fő alkatrész" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Kapcsolati megjegyzés" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7759,7 +7771,7 @@ msgstr "Csomag plugin" msgid "Plugin" msgstr "Bővítmény" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Nincs szerző" @@ -8289,7 +8301,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" @@ -8362,7 +8374,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" @@ -8446,7 +8458,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" @@ -8531,7 +8543,7 @@ msgstr "Alapértelmezett ikon azokhoz a helyekhez, melyeknek nincs ikonja beáll msgid "Stock Location" msgstr "Készlet hely" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Készlethelyek" @@ -8580,7 +8592,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" @@ -8625,7 +8637,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" @@ -8641,7 +8653,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" @@ -8754,7 +8766,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" @@ -8878,7 +8890,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" @@ -8902,222 +8914,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" @@ -9583,115 +9595,119 @@ msgstr "Elsődleges csoport" msgid "Primary group for the user" msgstr "Felhasználó elsődleges csoportja" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Adminisztrátor" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Beszerzési rendelések" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Vevői rendelések" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Rendszergazda" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "A felhasználó rendszergazda-e" -#: users/serializers.py:332 users/serializers.py:425 +#: 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:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Csak rendszergazda szerkesztheti ezt a mezőt" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Jelszó" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Felhasználó jelszava" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Figyelmezetés felülbírálása" -#: users/serializers.py:380 +#: 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:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: 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:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "A fiókod sikeresen létrejött." -#: users/serializers.py:484 +#: 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:490 +#: 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 aaf7973fd5..341c020d27 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Order Produksi" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Lokasi Sumber" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Diserahkan oleh" msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Penanggung Jawab" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Tautan menuju URL eksternal" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Jumlah" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item produksi harus menentukan hasil produksi karena bagian utama telah ditandai sebagai dapat dilacak" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:223 +#: build/serializers.py:231 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:235 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "Tidak diizinkan" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:991 +#: build/serializers.py:999 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:1007 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:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Pengguna" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Harga" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Pilihan" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Aktif" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Tanggal" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Admin" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 2b7b66284a..35c6737e65 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -665,89 +665,89 @@ msgstr "Data massima" msgid "Exclude Tree" msgstr "Escludi Albero" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opzionale" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Monitorato" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testabile" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Allocato" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Utilizzato" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Output" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtra per ID articolo stock di output. Usa 'null' per trovare elementi di produzione disinstallati." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Ordini di Produzione" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Posizione Di Origine" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Rilasciato da" msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Responsabile" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link a URL esterno" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Codice del progetto" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Impossibile finalizzare l'ordine di produzione con ordini secondari aperti" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossibile finalizzare l'ordine di produzione con articolo incompleti" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Impossibile scaricare l'attività per completare le allocazioni di build" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "L'output della build {serial} non ha superato tutti i test richiesti" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Impossibile completare parzialmente un build output con gli elementi assegnati" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Elemento di Riga Ordine di Produzione" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Crea oggetto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Quantità" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Quantità di articoli magazzino consumate" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'elemento di compilazione deve specificare un output poiché la parte principale è contrassegnata come rintracciabile" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "La quantità assegnata deve essere maggiore di zero" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Installa in" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Livello Produzione" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Nome Articolo" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Posizione dello stock per l'output della produzione" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Posizione dello stock per l'output di produzione rimosso" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Scarta Assegnazioni" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Motivo dell'eliminazione degli output di compilazione" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Consuma Giacenze Allocate" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:727 +#: build/serializers.py:735 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:762 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:816 +#: build/serializers.py:824 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:827 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:830 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:991 +#: build/serializers.py:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Riferimento BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "Identificativo dell'Articolo BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Nome Articolo BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantità assegnata" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Riferimento Ordine Di Costruzione" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Nome Categoria Articolo" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Tracciabile" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Disponibili scorte alternative" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Disponibili varianti delle scorte" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantità consumata supera la quantità assegnata" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "Note facoltative per il consumo di magazzino" -#: build/serializers.py:1783 +#: build/serializers.py:1807 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:1812 msgid "Duplicate build item allocation" msgstr "Duplica l'allocazione degli articoli da produrre" -#: build/serializers.py:1806 +#: build/serializers.py:1830 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:1835 msgid "Duplicate build line allocation" msgstr "Duplica l'allocazione della riga di produzione" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Deve essere fornita almeno un articolo o riga" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "È Un Connegamento" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "E' un file" -#: common/api.py:790 +#: 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:803 +#: 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" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Utente" msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Prezzo" @@ -1652,7 +1652,7 @@ msgstr "Nome per questa notifica" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Attivo" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "I parametri della casella di controllo non possono avere unità" msgid "Checkbox parameters cannot have choices" msgstr "I parametri della casella di controllo non possono avere scelte" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Le scelte devono essere uniche" @@ -2094,7 +2094,7 @@ msgstr "Casella di spunta" msgid "Is this parameter a checkbox?" msgstr "Questo parametro è una casella di spunta?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Scelte" @@ -2106,7 +2106,7 @@ msgstr "Scelte valide per questo parametro (separato da virgola)" msgid "Selection list for this parameter" msgstr "Lista di selezione per questo parametro" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Abilitato" @@ -2126,7 +2126,7 @@ msgstr "Parametri" msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2752 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" @@ -2140,7 +2140,7 @@ msgstr "ID del modello di destinazione per questo parametro" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modello" @@ -2148,7 +2148,7 @@ msgstr "Modello" msgid "Parameter template" msgstr "Modello Parametro" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dati" @@ -2156,18 +2156,18 @@ msgstr "Dati" msgid "Parameter Value" msgstr "Valore del Parametro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Note opzionali elemento" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Gli articoli sono modelli per impostazione predefinita" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Disabilitato: Mostra il percorso completo delle categorie al passaggio del mouse. Abilitato: Mostra il percorso completo delle categorie come testo." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Ricevi segnalazioni di errore" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Ricevi notifiche per errori di sistema" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Ultime stampanti usate" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Salva le ultime stampanti usate da un'utente" @@ -3988,33 +3996,33 @@ msgstr "L'articolo è attivo" msgid "Manufacturer is Active" msgstr "Il produttore è attivo" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "L'articolo fornitore è attivo" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "L'articolo interno è attivo" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Il fornitore è attivo" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Ha Scorte" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Seleziona articolo" msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL dell'articolo del fornitore" msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Quantità Confezione" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantità totale fornita in una singola confezione. Lasciare vuoto per gli articoli singoli." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "multiplo" @@ -4339,14 +4347,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" @@ -4451,67 +4463,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" @@ -4821,7 +4833,7 @@ msgstr "Ordine" msgid "Order Complete" msgstr "Ordine completato" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Articolo interno" @@ -4918,7 +4930,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:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Riferimento ordine" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Stato" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Ricevuto" msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Verificato Da" msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "La quantità di ripartizione non puo' superare la disponibilità della g msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nome Fornitore" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: 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:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Prezzo Automatico" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Unisci elementi" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Numero Articolo Interno" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: 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:837 +#: 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:847 +#: 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:855 order/serializers.py:2037 +#: 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:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: 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:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:988 +#: 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:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Spedizioni" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Elementi Assegnati" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "I seguenti numeri di serie non sono disponibili" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Articoli Linea Ordine Reso" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "L'elemento di riga è già stato ricevuto" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Quantità da restituire" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta del prezzo" @@ -5732,71 +5744,71 @@ msgstr "Escludi sottocategorie sotto la categoria specificata" msgid "Has Results" msgstr "Ha Risultati" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "È una Variante" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "E' una revisione" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Ha revisioni" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "BOM Valido" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Categorie a Cascata" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Se Vero, includere gli elementi nelle categorie figlie della categoria specificata" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtra per categoria ID numerica o per la stringa 'null'" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "L'articolo assemblato è provabile" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Il componente è provabile" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Utilizzi" @@ -5805,7 +5817,7 @@ msgstr "Utilizzi" msgid "Part Category" msgstr "Categoria Articoli" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Categorie Articolo" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Articoli" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Creazione Utente" msgid "Owner responsible for this part" msgstr "Utente responsabile di questo articolo" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Sovrascrivi il costo minimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Sovrascrivi il costo massimo" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Aggiungi Prezzo Ribassato di Vendita dell'Articolo" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Modello Prove Articolo" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nome modello non valido - deve includere almeno un carattere alfanumerico" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Il modello di prova può essere creato solo per gli articoli testabili" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Il modello di test con la stessa chiave esiste già per l'articolo" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Chiave Di Prova" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Chiave semplificata per la prova" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Questo test è attivo?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Richiesto" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Questa prova richiede un valore quando si aggiunge un risultato di prova?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Questa prova richiede un file allegato quando si aggiunge un risultato di prova?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Scelte valide per questo test (separate da virgole)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio è bloccato" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio della variante è bloccato" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Questo elemento della Distinta Base è consumabile (non è tracciato negli ordini di produzione)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Imposta quantità" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Quantità extra necessaria per una generazione, per tenere conto delle perdite di configurazione" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Logoramento" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Stima del logoramento per una build, espressa in percentuale (0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Arrotondamento Multiplo" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrotonda la quantità di produzione richiesta al multiplo più vicino di questo valore" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Questo articolo della distinta base è stato validato" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Viene Ereditato" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Questo elemento della Distinta Base viene ereditato dalle Distinte Base per gli articoli varianti" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Gli elementi in giacenza per gli articoli varianti possono essere utilizzati per questo elemento Distinta Base" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sostituita non può essere la stessa dell'articolo principale" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Nota per questa relazione" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Non si può creare una relazione tra l'articolo e sé stesso" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Nessun autore trovato" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Posizioni magazzino" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Amministratore" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Ordine di acquisto" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Ordini di Vendita" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Questo utente è un superutente" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Questo account utente è attivo" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Il tuo account è stato creato." -#: users/serializers.py:484 +#: 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:490 +#: 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 a6668e73e5..abe106b0df 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "メモ" @@ -215,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 "メールアドレス" @@ -269,7 +269,7 @@ msgstr "無効な選択です" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "サーバーによってエラーが記録されました。" msgid "Image" msgstr "画像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "コンテンツタイプが必須のミックスインクラスと一致しません" @@ -536,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の更新版が利用可能になりました" @@ -561,21 +561,21 @@ msgstr "注文ステータス" msgid "Parent Build" msgstr "親ビルド" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "カテゴリ" @@ -665,89 +665,89 @@ msgstr "最大日付" msgid "Exclude Tree" msgstr "ツリーを除く" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "消耗品" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "オプション" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "アセンブリ" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "追跡" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "テスト可能" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "受注残高" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "割り当てられた" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "消費されました" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "注文中" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "出力" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "出力ストックアイテムIDでフィルタリングします。未インストールビルドアイテムを検索するには「null」をご使用ください。" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "組立注文" @@ -783,9 +783,9 @@ msgstr "目標期日は開始日以降であること" msgid "Build Order Reference" msgstr "ビルド・オーダー・リファレンス" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "ソース・ロケーション" @@ -861,16 +861,16 @@ msgstr "組立状況" msgid "Build status code" msgstr "ビルドステータスコード" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "作成日時" @@ -907,120 +907,120 @@ msgstr "発行者" msgid "User who issued this build order" msgstr "このビルドオーダーを発行したユーザー" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "責任" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "このビルドオーダーを担当するユーザーまたはグループ" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "外部リンク" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "外部 サイト へのリンク" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "組立優先度" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "建設順序の優先順位" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "プロジェクトコード" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "プロジェクトコード" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "製造中の子ビルドがあるため、ビルドオーダーを完了できません" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "不完全な出力があるため、ビルドオーダーを完了できません" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "ビルドの割り当てを完了するタスクのオフロードに失敗しました。" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "ビルドオーダー{build}が完了しました" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "建設発注が完了しました" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "追跡可能な部品については、シリアル番号の提示が必要です。" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "ビルド出力が指定されていません" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "ビルド出力はすでに完了しています" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "数量が出力数量を上回ることはできません" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "ビルド出力は、必要なすべてのテストを通過していません" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "割り当てられた項目を含むビルド出力の一部のみを完了することはできません" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "ビルドオーダーラインアイテム" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "ビルドオブジェクト" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "数量" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "注文数量" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "消費された在庫の数量" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "ビルド項目は、ビルド出力を指定する必要があります。" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "選択された在庫品目が部品表に一致しません。" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "シリアル在庫の場合、数量は1でなければなりません。" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "在庫商品" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "ソース在庫品" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "建設に割り当てる在庫量" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "インストール" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "仕向け地在庫品" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "ビルドレベル" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "部品名" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "ビルド出力" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "ビルド出力が親ビルドと一致しません" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "出力部分が BuildOrder 部分と一致しません。" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "このビルド出力はすでに完了しています" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "このビルド出力は完全に割り当てられていません" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "ビルド出力の数量を入力" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "追跡可能な部品に必要な整数個数" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "ビルド出力のためのシリアル番号の入力" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "ビルド出力のストック位置" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "シリアル番号の自動割り当て" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "ビルド出力のリストを提供する必要があります。" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "スクラップされたアウトプットの在庫場所" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "廃棄割り当て" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "廃棄されたアウトプットに割り当てられた在庫の破棄" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "ビルドアウトプットを廃棄する理由" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "完成した建造物のアウトプットの場所" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "不完全割当の受入れ" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "在庫が完全に割り当てられていない場合は、出力を完了します。" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "割当在庫の消費" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "このビルドに割り当て済みのストックを消費します。" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "不完全な出力の削除" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "完了していないビルド出力を削除します。" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "不可" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "このビルド・オーダーで消費されるものとして受け入れます。" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "このビルドオーダーを完了する前に割り当てを解除します。" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "総合在庫" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "製造オーダーに割り当てられた余分な在庫品をどのように処理しますか?" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "一部の在庫品目は全体的に配分されています。" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "未割り当ての受け入れ" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当てられていないことを受け入れます。" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "必要在庫の配分が完了していません" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "インコンプリートの受け入れ" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "必要な数のビルドアウトプットが完了していないことを受け入れます。" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "必要な構築数量が完了していません" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "ビルド・オーダーには未完成の子ビルド・オーダーがあります。" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "受注生産状態であること" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "ビルド・オーダーの出力が不完全" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "ビルド出力" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "ビルド出力は同じビルド" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "ビルドラインアイテム" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "在庫があること" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "使用可能数量({q})を超過" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "追跡部品の割り当てには、ビルド出力を指定する必要があります。" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "割り当て項目の提供" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部品を調達する在庫場所(任意の場所から調達する場合は空白にしてください。)" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "場所を除く" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "この選択された場所から在庫商品を除外" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "交換可能ストック" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "複数の拠点にある在庫品を交換可能" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "代替ストック" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "代替部品の割り当て" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "オプション" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "オプションのBOMアイテムをビルドオーダーに割り当てます。" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "BOMリファレンス" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "BOMパーツID" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "部品表 部品名" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "割当数量" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "ビルドリファレンス" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "部品分類名" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "追跡可能" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "継承" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "BOMアイテム" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "ビルド予定" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "在庫状況" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "利用可能な代替ストック" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "在庫状況" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "消費量が割り当て量を超過しています" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "在庫消費に関する任意の注記" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "ビルド項目は正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "重複したビルド項目の割り当て" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "ビルドラインは正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "重複したビルドラインの割り当て" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "少なくとも1つの項目または行を指示する必要があります" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "期限切れ注文" msgid "Build order {bo} is now overdue" msgstr "ビルドオーダー{bo}は現在期限切れです" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "リンク" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "ファイル" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "ユーザーにはこの添付ファイルを削除する権限がありません" @@ -1550,7 +1550,7 @@ msgstr "有効な通貨コードはありません" msgid "No plugin" msgstr "プラグインなし" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "プロジェクトコードラベル" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "ユーザー" msgid "Price break quantity" msgstr "価格破壊数量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "価格" @@ -1652,7 +1652,7 @@ msgstr "このウェブフックの名前" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "有効" @@ -1849,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 "添付ファイルに指定されたモデルタイプが無効です" @@ -2058,7 +2058,7 @@ msgstr "チェックボックスのパラメータに単位を指定すること msgid "Checkbox parameters cannot have choices" msgstr "チェックボックスパラメータに選択肢を持たせることはできません。" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "選択肢はユニークでなければなりません" @@ -2094,7 +2094,7 @@ msgstr "チェックボックス" msgid "Is this parameter a checkbox?" msgstr "このパラメータはチェックボックスですか?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "選択肢" @@ -2106,7 +2106,7 @@ msgstr "このパラメータの有効な選択肢(カンマ区切り)" msgid "Selection list for this parameter" msgstr "このパラメータの選択リスト" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "有効" @@ -2126,7 +2126,7 @@ msgstr "パラメータ" msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "パラメータに対して無効なモデルタイプが指定されています" @@ -2140,7 +2140,7 @@ msgstr "このパラメータの対象となるモデルのID" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "テンプレート" @@ -2148,7 +2148,7 @@ msgstr "テンプレート" msgid "Parameter template" msgstr "パラメータテンプレート" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "データ" @@ -2156,18 +2156,18 @@ msgstr "データ" msgid "Parameter Value" msgstr "パラメータ値" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "任意のメモ欄" @@ -2391,85 +2391,85 @@ 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 +#: 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 "選択リストがロックされています" @@ -2859,8 +2859,8 @@ msgstr "パーツはデフォルトのテンプレートです" msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:489 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 "コンポーネント" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "無効時:カテゴリの完全なパスがホバー時のツールチップとして表示されます。有効時:カテゴリの完全なパスがプレーンテキストとして表示されます。" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "エラー・レポートの受信" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "システムエラーの通知を受信" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "最後の中古印刷機" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "ユーザーの最後に使用した印刷機を保存" @@ -3988,33 +3996,33 @@ msgstr "パートはアクティブ" msgid "Manufacturer is Active" msgstr "メーカーはアクティブ" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "サプライヤーが活動中" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "内部はアクティブ" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "サプライヤーの活動" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "在庫あり" @@ -4195,7 +4203,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 "メーカー・パーツ" @@ -4213,12 +4221,12 @@ msgstr "部品を選択" msgid "Select manufacturer" msgstr "メーカー選択" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "メーカー品番" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "サプライヤー在庫管理ユニット" @@ -4282,16 +4290,16 @@ msgstr "外部サプライヤー部品リンク用URL" msgid "Supplier part description" msgstr "サプライヤーの部品説明" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "基本料金" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "パック数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "1パックに供給される総量。単品の場合は空のままにしてください。" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "複数" @@ -4339,14 +4347,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 "データのエクスポート中にエラーが発生しました" @@ -4451,67 +4463,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形式が指定されました" @@ -4821,7 +4833,7 @@ msgstr "注文" msgid "Order Complete" msgstr "注文完了" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "内部パーツ" @@ -4918,7 +4930,7 @@ msgstr "開始日" msgid "Scheduled start date for this order" msgstr "本注文の開始予定日" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "終了日に達したら" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "注文参照" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "ステータス" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "受信" msgid "Number of items received" msgstr "受領品目数" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "購入金額" @@ -5211,8 +5223,8 @@ msgstr "チェック済み" msgid "User who checked this shipment" msgstr "この貨物をチェックしたユーザー" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "発送" @@ -5277,7 +5289,7 @@ msgstr "割当数量が在庫数量を超えることはできません" msgid "Allocation quantity must be greater than zero" msgstr "割当数量はゼロより大きくなければなりません" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。" @@ -5393,7 +5405,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 "コピーパラメータ" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "サプライヤー名" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "ご注文のキャンセルはできません。" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "未完了の行項目で注文を閉じることができます。" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "注文に不備がある場合" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "ご注文は受け付けておりません。" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自動車価格" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "サプライヤーの部品データに基づいて購入価格を自動計算" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "購入価格通貨" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "アイテムのマージ" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "内部部品名" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "サプライヤー部品の指定が必要" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "注文書の指定が必要" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "サプライヤーは発注書と一致しなければなりません。" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "発注書はサプライヤーと一致している必要があります。" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "明細" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "受取商品の配送先選択" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "入荷在庫品のバッチコード入力" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "入荷在庫の有効期限の入力" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "入荷した在庫品のシリアル番号の入力" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "入荷在庫品の包装情報の上書き" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "在庫品の入荷に関する注意事項" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "バーコード" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "スキャンされたバーコード" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "バーコードはすでに使用されています" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "項目は必ずご記入ください。" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "デスティネーション・ロケーションを指定する必要があります。" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "バーコードの値は一意でなければなりません。" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "発送" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完了した出荷" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "販売価格通貨" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "割当項目" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "出荷の詳細は記載されていません" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "ラインアイテムは、この注文に関連付けられていません。" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "数量は正数でなければなりません。" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "出荷済み" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "この注文には出荷が関連付けられていません" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "以下のシリアル番号に該当するものは見つかりませんでした。" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下のシリアル番号はご利用いただけません。" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "返品注文項目" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "ラインアイテムが返品オーダーと一致しません" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "ラインアイテムはすでに受領済み" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "返品数量" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "ライン価格通貨" @@ -5732,71 +5744,71 @@ msgstr "指定したカテゴリの下にあるサブカテゴリを除外しま msgid "Has Results" msgstr "実績あり" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "バリエーション?" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "改訂版" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "改定あり" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "BOM有効" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "カスケードカテゴリ" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "もし該当する場合には、指定されたカテゴリの子カテゴリ内のアイテムを含めてください。" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "数値カテゴリIDまたはリテラル'null'でフィルタリングしてください" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "組み立て部分はテスト可能" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "コンポーネント部分はテスト可能" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "用途" @@ -5805,7 +5817,7 @@ msgstr "用途" msgid "Part Category" msgstr "パーツカテゴリ" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "パーツカテゴリ" @@ -5837,7 +5849,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 "アイコン (オプション)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "パーツ" @@ -5973,10 +5985,10 @@ 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 "即時支払通知" +msgstr "IPN" #: part/models.py:1158 msgid "Part revision or version number" @@ -6006,7 +6018,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 "最小在庫" @@ -6086,756 +6098,756 @@ msgstr "作成ユーザー" msgid "Owner responsible for this part" msgstr "この部分の責任者" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "複数販売" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "価格計算のキャッシュに使用される通貨" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "最小BOMコスト" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "構成部品の最低コスト" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "最大BOMコスト" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "構成部品の最大コスト" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "最低購入価格" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "過去の最低購入価額" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "最大購入費用" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "過去の最高購入価格" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "最低社内価格" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最低コスト" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "社内最高価格" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最大コスト" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "最低供給価格" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最低価格" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "サプライヤー最高価格" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最高価格" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "最小バリアントコスト" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "バリアントパーツの最小コストの計算" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "最大バリアントコスト" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "バリアント部品の最大コストの計算" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "最低料金" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "最低コストのオーバーライド" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "最大コスト" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "最大コストのオーバーライド" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "総合的な最小コストの計算" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "総合最大コストの計算" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "最低販売価格" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "価格破壊に基づく最低販売価格" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "最高販売価格" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "価格破壊に基づく最高販売価格" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "最低販売価格" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "過去の最低売却価格" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "最大販売価格" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "過去の最高売却価格" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "ストックテイク用部品" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "個数" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "棚卸時の個別在庫数" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "ストックテイク時の在庫可能量" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "日付" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "ストックテイク実施日" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "最低在庫コスト" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "手元在庫の最低見積原価" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "最大在庫コスト" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "手元在庫の最大見積原価" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "パーツセール価格" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "部品試験テンプレート" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "無効なテンプレート名 - 英数字を1文字以上含む必要があります。" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "テストテンプレートは、テスト可能な部分に対してのみ作成できます。" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "同じキーを持つテスト・テンプレートがパートに既に存在します。" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "試験名" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "テストの名前を入力します。" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "テストキー" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "テストの簡易キー" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "試験内容" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "このテストの説明を入力してください。" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "このテストは有効ですか?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "必須" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "このテストは合格するために必要ですか?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "価値が必要" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "このテストは、テスト結果を追加する際に値を必要としますか?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "アタッチメントが必要" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "この試験では、試験結果を追加する際にファイルの添付が必要ですか。" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "このテストで有効な選択肢(カンマ区切り)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOMアイテムは変更できません - アセンブリがロックされています。" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM アイテムは変更できません - バリアントアセンブリがロックされています。" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "親部品を選択" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "サブパート" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "BOMで使用する部品を選択" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "このBOMアイテムのBOM数量" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "この部品表はオプションです。" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "このBOMアイテムは消耗品です。" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "設定数量" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "ビルドに必要な追加の必要量(セットアップ時の損失を考慮した分)" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "歩留まり損失" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "ビルドにおける推定歩留まり率(0~100%で表されます)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "丸め倍数" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "必要な生産数量を、この値の倍数に切り上げてください。" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "BOMアイテムリファレンス" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "BOMアイテムノート" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "チェックサムi" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "BOMラインのチェックサム" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "検証済み" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "このBOMアイテムは検証済みです" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "継承" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "この BOM アイテムは、バリアントパーツの BOM に継承されます。" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "このBOMアイテムには、バリアントパーツのストックアイテムを使用できます。" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "数量は追跡可能な部品の場合、整数値でなければなりません。" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "サブパーツの指定が必要" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "BOMアイテム代替" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "代用部品はマスター部品と同じにすることはできません。" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "親BOMアイテム" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "代用部品" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "パート #1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "パート #2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "関連部品を選択" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "この関係について" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "部品とそれ自身との間に部品関係を作ることはできません。" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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アイテムの重複時に代替部品をコピー" @@ -7758,7 +7770,7 @@ msgstr "パッケージプラグイン" msgid "Plugin" msgstr "プラグイン" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "著者は見つかりませんでした" @@ -8288,7 +8300,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 "設置項目" @@ -8361,7 +8373,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 "親の位置" @@ -8445,7 +8457,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 "期限失効" @@ -8530,7 +8542,7 @@ msgstr "アイコンが設定されていないすべての場所のデフォル msgid "Stock Location" msgstr "ストックロケーション" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "在庫場所" @@ -8579,7 +8591,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 "仮想部品にストックアイテムを作成できません" @@ -8624,7 +8636,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 "この在庫品は以下の梱包で保管されています。" @@ -8640,7 +8652,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 "このストックアイテムのバッチコード" @@ -8753,7 +8765,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 "在庫品の重複" @@ -8877,7 +8889,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 "この結果のテストテンプレート" @@ -8901,222 +8913,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 "以前のシリアル番号" @@ -9582,115 +9594,119 @@ msgstr "プライマリーグループ" msgid "Primary group for the user" msgstr "ユーザーのプライマリグループ" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "管理者" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "購入注文" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "セールスオーダー" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "スーパーユーザー" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "このユーザーはスーパーユーザーですか?" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "このユーザーアカウントはアクティブですか" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "このフィールドを調整できるのはスーパーユーザーのみです。" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "パスワード" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "ユーザーのパスワード" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "警告を上書きします" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "パスワードルールに関する警告を無効にする" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "ユーザーを作成する権限がありません" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "アカウントが作成されました" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "パスワードリセット機能を使ってログインしてください" -#: users/serializers.py:490 +#: 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 0e282ae42e..c270f0489b 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -19,35 +19,35 @@ 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:832 msgid "User does not have permission to view this model" @@ -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: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,82 +102,82 @@ 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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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:614 msgid "Cannot serialize more than 1000 items at once" -msgstr "" +msgstr "한 번에 1000개를 초과하여 직렬화할 수 없습니다" #: InvenTree/helpers.py:620 msgid "Empty serial number string" -msgstr "" +msgstr "시리얼 번호 문자열이 비어 있습니다" #: InvenTree/helpers.py:649 msgid "Duplicate serial" -msgstr "" +msgstr "중복된 시리얼" #: 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:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" +msgstr "그룹 범위 {group}이(가) 허용된 수량({expected_quantity})을 초과합니다" #: InvenTree/helpers.py:778 msgid "No serial numbers found" -msgstr "" +msgstr "시리얼 번호를 찾을 수 없습니다" #: 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:915 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "이 값에서 HTML 태그를 제거하세요" #: InvenTree/helpers.py:992 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "데이터에 금지된 마크다운 내용이 포함되어 있습니다" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "잘못된 URL: 호스트명이 없습니다" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "잘못된 URL: 호스트명을 확인할 수 없습니다" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL이 사설 또는 예약된 IP 주소를 가리킵니다" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "리디렉션이 너무 많습니다" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -185,15 +185,15 @@ msgstr "연결 오류" #: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" -msgstr "" +msgstr "서버가 잘못된 상태 코드를 반환했습니다" #: InvenTree/helpers_model.py:210 msgid "Exception occurred" -msgstr "" +msgstr "예외가 발생했습니다" #: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "서버가 잘못된 Content-Length 값을 반환했습니다" #: InvenTree/helpers_model.py:223 msgid "Image size is too large" @@ -201,75 +201,75 @@ msgstr "이미지 크기가 너무 큽니다!" #: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" -msgstr "" +msgstr "이미지 다운로드가 최대 크기를 초과했습니다" #: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" -msgstr "" +msgstr "원격 서버가 빈 응답을 반환했습니다" #: 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -291,15 +291,15 @@ msgstr "설명 (선택 사항)" #: 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" @@ -307,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" @@ -327,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:4182 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:3316 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" @@ -536,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: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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: 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" @@ -611,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" @@ -663,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 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "소모품" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "선택사항" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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 +#: build/api.py:467 msgid "Tracked" -msgstr "" +msgstr "추적됨" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" -msgstr "" +msgstr "테스트 가능" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" -msgstr "" +msgstr "미결 주문" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" -msgstr "" +msgstr "할당됨" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" -msgstr "" +msgstr "소모됨" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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 +#: build/api.py:685 msgid "Build not found" -msgstr "" +msgstr "빌드를 찾을 수 없습니다" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" -msgstr "" +msgstr "산출물" -#: build/api.py:969 +#: build/api.py:983 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 +#: build/models.py:121 users/ruleset.py:33 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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:1093 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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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: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 +#: build/models.py:419 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 +#: build/models.py:420 msgid "User or group responsible for this build order" -msgstr "" +msgstr "이 작업 지시서를 담당하는 사용자 또는 그룹" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" -msgstr "" +msgstr "외부 링크" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" -msgstr "" +msgstr "외부 URL로 연결" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" -msgstr "" +msgstr "빌드 우선순위" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" -msgstr "" +msgstr "이 빌드 주문의 우선순위" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" -msgstr "" +msgstr "프로젝트 코드" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" -msgstr "" +msgstr "이 빌드 주문의 프로젝트 코드" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" -msgstr "" +msgstr "진행 중인 하위 빌드가 있는 상태에서는 작업 지시서를 완료할 수 없습니다" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" -msgstr "" +msgstr "미완료 산출물이 있는 상태에서는 작업 지시서를 완료할 수 없습니다" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" -msgstr "" +msgstr "빌드 자재 할당 완료 처리를 위한 작업 실행에 실패했습니다" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "작업 지시서 {build}이(가) 완료되었습니다" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" -msgstr "" +msgstr "작업 지시서가 완료되었습니다" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" -msgstr "" +msgstr "추적 가능한 부품에는 시리얼 번호를 제공해야 합니다" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" -msgstr "" +msgstr "생산 완제품이 지정되지 않았습니다" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" -msgstr "" +msgstr "생산 완제품이 이미 완료되었습니다" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" -msgstr "" +msgstr "수량은 산출물 수량보다 클 수 없습니다" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" -msgstr "" +msgstr "생산 완제품이 모든 필수 테스트를 통과하지 못했습니다" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1203 -msgid "Allocated stock items are still in production" -msgstr "" +msgstr "생산 완제품 {serial}이(가) 모든 필수 테스트를 통과하지 못했습니다" #: build/models.py:1211 +msgid "Allocated stock items are still in production" +msgstr "할당된 재고 항목이 아직 생산 중입니다" + +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "할당된 항목이 있는 빌드 산출물은 부분 완료할 수 없습니다" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" -msgstr "" +msgstr "소요 자재 품목" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,701 +1032,701 @@ 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" msgstr "수량" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" -msgstr "" +msgstr "작업 지시서에 필요한 수량" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" -msgstr "" +msgstr "소모된 재고 수량" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "마스터 부품이 추적 가능으로 표시되어 있으므로, 빌드 항목은 생산 완제품을 지정해야 합니다" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" -msgstr "" +msgstr "선택한 재고 항목이 BOM 라인과 일치하지 않습니다" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "할당 수량은 0보다 커야 합니다" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "시리얼이 있는 재고의 수량은 1이어야 합니다" -#: build/models.py:1986 +#: build/models.py:1994 #, 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:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 +#: build/models.py:2101 msgid "Source stock item" -msgstr "" +msgstr "원본 재고 항목" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "빌드에 할당할 재고 수량" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" -msgstr "" +msgstr "설치 대상" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" -msgstr "" +msgstr "대상 재고 항목" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" -msgstr "" +msgstr "빌드 레벨" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" -msgstr "" +msgstr "부품명" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" -msgstr "" - -#: build/serializers.py:219 -msgid "Build output does not match the parent build" -msgstr "" - -#: build/serializers.py:223 -msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "빌드 산출물" #: build/serializers.py:227 +msgid "Build output does not match the parent build" +msgstr "빌드 산출물이 상위 빌드와 일치하지 않습니다" + +#: build/serializers.py:231 +msgid "Output part does not match BuildOrder part" +msgstr "산출물 부품이 빌드 주문 부품과 일치하지 않습니다" + +#: build/serializers.py:235 msgid "This build output has already been completed" -msgstr "" +msgstr "이 빌드 산출물은 이미 완료되었습니다" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" -msgstr "" +msgstr "이 빌드 산출물은 완전히 할당되지 않았습니다" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" -msgstr "" +msgstr "빌드 산출물 수량을 입력하세요" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" -msgstr "" +msgstr "추적 가능한 부품에는 정수 수량이 필요합니다" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" +msgstr "BOM에 추적 가능한 부품이 포함되어 있으므로 정수 수량이 필요합니다" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "시리얼 번호 (일련번호)" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "빌드 산출물의 시리얼 번호를 입력하세요" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" -msgstr "" +msgstr "빌드 산출물의 재고 위치" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" -msgstr "" +msgstr "시리얼 번호 자동 할당" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" -msgstr "" +msgstr "일치하는 시리얼 번호로 필요한 항목을 자동으로 할당합니다" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" -msgstr "" +msgstr "빌드 산출물 목록을 제공해야 합니다" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" -msgstr "" +msgstr "폐기된 산출물의 재고 위치" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" -msgstr "" +msgstr "할당 폐기" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" -msgstr "" +msgstr "폐기된 산출물에 대한 모든 재고 할당을 폐기합니다" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" -msgstr "" - -#: build/serializers.py:556 -msgid "Location for completed build outputs" -msgstr "" +msgstr "빌드 산출물 폐기 사유" #: build/serializers.py:564 +msgid "Location for completed build outputs" +msgstr "완료된 빌드 산출물의 위치" + +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" -msgstr "" +msgstr "불완전한 할당 허용" -#: build/serializers.py:565 +#: build/serializers.py:573 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 "" - -#: build/serializers.py:697 -msgid "Remove Incomplete Outputs" -msgstr "" +msgstr "재고가 완전히 할당되지 않았더라도 산출물을 완료합니다" #: build/serializers.py:698 +msgid "Consume Allocated Stock" +msgstr "할당된 재고 소모" + +#: build/serializers.py:699 +msgid "Consume any stock which has already been allocated to this build" +msgstr "이 빌드에 이미 할당된 모든 재고를 소모합니다" + +#: build/serializers.py:705 +msgid "Remove Incomplete Outputs" +msgstr "미완료 산출물 제거" + +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" -msgstr "" +msgstr "완료되지 않은 모든 빌드 산출물을 삭제합니다" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" -msgstr "" +msgstr "허용되지 않음" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" -msgstr "" +msgstr "이 빌드 주문에 의해 소모된 것으로 수락" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" -msgstr "" +msgstr "이 빌드 주문을 완료하기 전에 할당을 해제하세요" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" -msgstr "" +msgstr "과다 할당된 재고" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" +msgstr "빌드 주문에 추가로 할당된 재고 항목을 어떻게 처리하시겠습니까" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" -msgstr "" +msgstr "일부 재고 항목이 과다 할당되었습니다" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" -msgstr "" +msgstr "미할당 수락" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" +msgstr "재고 항목이 이 빌드 주문에 완전히 할당되지 않았음을 수락합니다" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" -msgstr "" +msgstr "필요한 재고가 완전히 할당되지 않았습니다" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" -msgstr "" +msgstr "불완전 수락" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" -msgstr "" +msgstr "필요한 개수의 빌드 산출물이 완료되지 않았음을 수락합니다" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" -msgstr "" +msgstr "필요한 빌드 수량이 완료되지 않았습니다" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" -msgstr "" +msgstr "작업 지시서에 진행 중인 하위 작업 지시서가 있습니다" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" -msgstr "" +msgstr "작업 지시서는 생산 상태여야 합니다" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" -msgstr "" - -#: build/serializers.py:861 -msgid "Build Line" -msgstr "" +msgstr "작업 지시서에 미완료 산출물이 있습니다" #: build/serializers.py:869 -msgid "Build output" -msgstr "" +msgid "Build Line" +msgstr "빌드 라인" #: build/serializers.py:877 +msgid "Build output" +msgstr "생산 완제품" + +#: build/serializers.py:885 msgid "Build output must point to the same build" -msgstr "" +msgstr "생산 완제품은 동일한 빌드를 가리켜야 합니다" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" -msgstr "" +msgstr "빌드 라인 항목" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" -msgstr "" +msgstr "항목은 재고에 있어야 합니다" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "" - -#: build/serializers.py:991 -msgid "Build output must be specified for allocation of tracked parts" -msgstr "" +msgstr "사용 가능한 수량({q})을 초과했습니다" #: build/serializers.py:999 +msgid "Build output must be specified for allocation of tracked parts" +msgstr "추적 부품을 할당하려면 생산 완제품을 지정해야 합니다" + +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" +msgstr "비추적 부품 할당에는 생산 완제품을 지정할 수 없습니다" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" -msgstr "" +msgstr "할당 항목을 제공해야 합니다" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" +msgstr "부품을 공급할 재고 위치 (비워두면 어떤 위치에서든 가져옵니다)" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" -msgstr "" +msgstr "위치 제외" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" -msgstr "" +msgstr "선택한 위치의 재고 항목을 제외합니다" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" -msgstr "" +msgstr "상호 대체 가능한 재고" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" +msgstr "여러 위치에 있는 재고 품목을 서로 대체하여 사용할 수 있습니다" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" -msgstr "" +msgstr "대체 재고" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" -msgstr "" - -#: build/serializers.py:1114 -msgid "Optional Items" -msgstr "" - -#: build/serializers.py:1115 -msgid "Allocate optional BOM items to build order" -msgstr "" - -#: build/serializers.py:1121 -msgid "All Items" -msgstr "" +msgstr "대체 부품 할당을 허용합니다" #: build/serializers.py:1122 -msgid "Untracked Items" -msgstr "" +msgid "Optional Items" +msgstr "선택 항목" #: build/serializers.py:1123 +msgid "Allocate optional BOM items to build order" +msgstr "빌드 주문에 선택 BOM 항목을 할당합니다" + +#: build/serializers.py:1129 +msgid "All Items" +msgstr "모든 항목" + +#: build/serializers.py:1130 +msgid "Untracked Items" +msgstr "비추적 항목" + +#: build/serializers.py:1131 msgid "Tracked Items" -msgstr "" +msgstr "추적 항목" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" -msgstr "" +msgstr "항목 유형" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "자동 할당할 항목 유형을 선택하세요" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" -msgstr "" +msgstr "BOM 참조" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" -msgstr "" +msgstr "BOM 부품 ID" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" -msgstr "" +msgstr "BOM 부품명" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" -msgstr "" +msgstr "설치 대상" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" -msgstr "" +msgstr "할당 수량" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" -msgstr "" +msgstr "빌드 참조" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" -msgstr "" +msgstr "부품 카테고리 이름" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" -msgstr "" +msgstr "추적 가능" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" -msgstr "" +msgstr "상속됨" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" -msgstr "" +msgstr "변형(Variant) 허용" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" -msgstr "" +msgstr "BOM 항목" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 part/serializers.py:885 msgid "External Stock" -msgstr "" +msgstr "외부 재고" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" -msgstr "" +msgstr "사용 가능 재고" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" -msgstr "" +msgstr "사용 가능 대체 재고" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" -msgstr "" +msgstr "사용 가능 변형(Variant) 재고" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" -msgstr "" +msgstr "소모 수량이 할당 수량을 초과합니다" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" -msgstr "" +msgstr "재고 소모에 대한 선택 메모" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" -msgstr "" +msgstr "빌드 항목은 올바른 빌드 주문을 가리켜야 합니다" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" -msgstr "" +msgstr "빌드 항목 할당이 중복되었습니다" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" -msgstr "" +msgstr "빌드 라인은 올바른 빌드 주문을 가리켜야 합니다" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" -msgstr "" +msgstr "빌드 라인 할당이 중복되었습니다" -#: build/serializers.py:1823 +#: build/serializers.py:1847 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:735 +#: common/api.py:722 msgid "Is Link" -msgstr "" +msgstr "링크 여부" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" -msgstr "" +msgstr "파일 여부" + +#: common/api.py:777 +msgid "User does not have permission to delete these attachments" +msgstr "사용자에게 이 첨부파일들을 삭제할 권한이 없습니다" #: common/api.py:790 -msgid "User does not have permission to delete these attachments" -msgstr "" - -#: common/api.py:803 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: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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: 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:1890 +#: 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: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:332 users/serializers.py:424 +#: 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:3094 msgid "Message ID" -msgstr "" +msgstr "메시지 ID" #: 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 @@ -1734,872 +1734,872 @@ msgstr "" #: 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: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: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: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: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: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: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:2371 msgid "Selection List Entry" -msgstr "" +msgstr "선택 목록 항목" #: common/models.py:2372 msgid "Selection List Entries" -msgstr "" +msgstr "선택 목록 항목" #: common/models.py:2382 msgid "Selection list to which this entry belongs" -msgstr "" +msgstr "이 항목이 속한 선택 목록" #: common/models.py:2388 msgid "Value of the selection list entry" -msgstr "" +msgstr "선택 목록 항목의 값" #: common/models.py:2394 msgid "Label for the selection list entry" -msgstr "" +msgstr "선택 목록 항목 라벨" #: common/models.py:2400 msgid "Description of the selection list entry" -msgstr "" +msgstr "선택 목록 항목 설명" #: common/models.py:2407 msgid "Is this selection list entry active?" -msgstr "" +msgstr "이 선택 목록 항목이 활성 상태인가요?" #: common/models.py:2441 msgid "Parameter Template" -msgstr "" +msgstr "매개변수 템플릿" #: common/models.py:2442 msgid "Parameter Templates" -msgstr "" +msgstr "매개변수 템플릿" #: common/models.py:2479 msgid "Checkbox parameters cannot have units" -msgstr "" +msgstr "체크박스 매개변수에는 단위를 지정할 수 없습니다" #: common/models.py:2484 msgid "Checkbox parameters cannot have choices" -msgstr "" +msgstr "체크박스 매개변수에는 선택지를 지정할 수 없습니다" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" -msgstr "" +msgstr "선택지는 고유해야 합니다" #: common/models.py:2521 msgid "Parameter template name must be unique" -msgstr "" +msgstr "매개변수 템플릿 이름은 고유해야 합니다" #: common/models.py:2543 msgid "Target model type for this parameter template" -msgstr "" +msgstr "이 매개변수 템플릿의 대상 모델 유형" #: common/models.py:2549 msgid "Parameter Name" -msgstr "" +msgstr "매개변수 이름" #: common/models.py:2555 part/models.py:1240 msgid "Units" -msgstr "" +msgstr "단위" #: common/models.py:2556 msgid "Physical units for this parameter" -msgstr "" +msgstr "이 매개변수의 물리 단위" #: common/models.py:2564 msgid "Parameter description" -msgstr "" +msgstr "매개변수 설명" #: common/models.py:2570 msgid "Checkbox" -msgstr "" +msgstr "체크박스" #: common/models.py:2571 msgid "Is this parameter a checkbox?" -msgstr "" +msgstr "이 매개변수는 체크박스인가요?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" -msgstr "" +msgstr "선택지" #: common/models.py:2577 msgid "Valid choices for this parameter (comma-separated)" -msgstr "" +msgstr "이 매개변수에 대한 유효한 선택지(쉼표로 구분)" #: common/models.py:2588 msgid "Selection list for this parameter" -msgstr "" +msgstr "이 매개변수의 선택 목록" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" -msgstr "" +msgstr "사용" #: common/models.py:2594 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "이 매개변수 템플릿을 사용하나요?" #: common/models.py:2635 msgid "Parameter" -msgstr "" +msgstr "매개변수" #: common/models.py:2636 msgid "Parameters" -msgstr "" +msgstr "매개변수" #: common/models.py:2682 msgid "Invalid choice for parameter value" -msgstr "" +msgstr "매개변수 값에 대한 선택지가 올바르지 않습니다" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "매개변수에 지정된 모델 유형이 올바르지 않습니다" #: common/models.py:2788 msgid "Model ID" -msgstr "" +msgstr "모델 ID" #: common/models.py:2789 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "이 매개변수의 대상 모델 ID" #: 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:244 +#: stock/serializers.py:245 msgid "Template" -msgstr "" +msgstr "템플릿" #: common/models.py:2799 msgid "Parameter template" -msgstr "" +msgstr "매개변수 템플릿" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" -msgstr "" +msgstr "데이터" #: common/models.py:2805 msgid "Parameter Value" -msgstr "" +msgstr "매개변수 값" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" -msgstr "" +msgstr "선택적 메모 필드" #: common/models.py:2842 msgid "Barcode Scan" -msgstr "" +msgstr "바코드 스캔" #: common/models.py:2847 msgid "Barcode data" -msgstr "" +msgstr "바코드 데이터" #: common/models.py:2858 msgid "User who scanned the barcode" -msgstr "" +msgstr "바코드를 스캔한 사용자" #: common/models.py:2863 importer/models.py:70 msgid "Timestamp" -msgstr "" +msgstr "타임스탬프" #: common/models.py:2864 msgid "Date and time of the barcode scan" -msgstr "" +msgstr "바코드 스캔 날짜 및 시간" #: common/models.py:2870 msgid "URL endpoint which processed the barcode" -msgstr "" +msgstr "바코드를 처리한 URL 엔드포인트" #: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 msgid "Context" -msgstr "" +msgstr "컨텍스트" #: common/models.py:2878 msgid "Context data for the barcode scan" -msgstr "" +msgstr "바코드 스캔의 컨텍스트 데이터" #: common/models.py:2885 msgid "Response" -msgstr "" +msgstr "응답" #: common/models.py:2886 msgid "Response data from the barcode scan" -msgstr "" +msgstr "바코드 스캔의 응답 데이터" #: common/models.py:2892 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3059 msgid "Result" -msgstr "" +msgstr "결과" #: common/models.py:2893 msgid "Was the barcode scan successful?" -msgstr "" +msgstr "바코드 스캔이 성공했나요?" #: common/models.py:2975 msgid "An error occurred" -msgstr "" +msgstr "오류가 발생했습니다" #: common/models.py:2996 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." -msgstr "" +msgstr "INVE-E8: 이메일 로그 삭제가 보호되어 있습니다. 삭제를 허용하려면 INVENTREE_PROTECT_EMAIL_LOG를 False로 설정하세요." #: common/models.py:3043 msgid "Email Message" -msgstr "" +msgstr "이메일 메시지" #: common/models.py:3044 msgid "Email Messages" -msgstr "" +msgstr "이메일 메시지" #: common/models.py:3051 msgid "Announced" -msgstr "" +msgstr "공지됨" #: common/models.py:3053 msgid "Sent" -msgstr "" +msgstr "전송됨" #: common/models.py:3054 msgid "Failed" -msgstr "" +msgstr "실패" #: common/models.py:3057 msgid "Delivered" -msgstr "" +msgstr "전달됨" #: common/models.py:3065 msgid "Confirmed" -msgstr "" +msgstr "확인됨" #: common/models.py:3071 msgid "Inbound" -msgstr "" +msgstr "수신" #: common/models.py:3072 msgid "Outbound" -msgstr "" +msgstr "발신" #: common/models.py:3077 msgid "No Reply" -msgstr "" +msgstr "회신 없음" #: common/models.py:3078 msgid "Track Delivery" -msgstr "" +msgstr "전달 추적" #: common/models.py:3079 msgid "Track Read" -msgstr "" +msgstr "읽음 추적" #: common/models.py:3080 msgid "Track Click" -msgstr "" +msgstr "클릭 추적" #: common/models.py:3083 common/models.py:3186 msgid "Global ID" -msgstr "" +msgstr "전역 ID" #: common/models.py:3096 msgid "Identifier for this message (might be supplied by external system)" -msgstr "" +msgstr "이 메시지의 식별자(외부 시스템에서 제공될 수 있음)" #: common/models.py:3103 msgid "Thread ID" -msgstr "" +msgstr "스레드 ID" #: common/models.py:3105 msgid "Identifier for this message thread (might be supplied by external system)" -msgstr "" +msgstr "이 메시지 스레드의 식별자(외부 시스템에서 제공될 수 있음)" #: common/models.py:3114 msgid "Thread" -msgstr "" +msgstr "스레드" #: common/models.py:3115 msgid "Linked thread for this message" -msgstr "" +msgstr "이 메시지에 연결된 스레드" #: common/models.py:3131 msgid "Priority" -msgstr "" +msgstr "우선순위" #: common/models.py:3173 msgid "Email Thread" -msgstr "" +msgstr "이메일 스레드" #: common/models.py:3174 msgid "Email Threads" -msgstr "" +msgstr "이메일 스레드" #: 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:3183 msgid "Unique key for this thread (used to identify the thread)" -msgstr "" +msgstr "이 스레드의 고유 키(스레드 식별에 사용)" #: common/models.py:3187 msgid "Unique identifier for this thread" -msgstr "" +msgstr "이 스레드의 고유 식별자" #: common/models.py:3194 msgid "Started Internal" -msgstr "" +msgstr "내부 시작" #: common/models.py:3195 msgid "Was this thread started internally?" -msgstr "" +msgstr "이 스레드는 내부에서 시작되었나요?" #: common/models.py:3200 msgid "Date and time that the thread was created" -msgstr "" +msgstr "스레드가 생성된 날짜 및 시간" #: 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 +#: 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:97 msgid "No group" -msgstr "" +msgstr "그룹 없음" #: common/setting/system.py:170 msgid "Site URL is locked by configuration" -msgstr "" +msgstr "사이트 URL이 구성에 의해 잠겨 있습니다" #: common/setting/system.py:187 msgid "Restart required" -msgstr "" +msgstr "재시작 필요" #: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" -msgstr "" +msgstr "서버 재시작이 필요한 설정이 변경되었습니다" #: common/setting/system.py:194 msgid "Pending migrations" -msgstr "" +msgstr "대기 중인 마이그레이션" #: common/setting/system.py:195 msgid "Number of pending database migrations" -msgstr "" +msgstr "대기 중인 데이터베이스 마이그레이션 수" #: common/setting/system.py:200 msgid "Active warning codes" -msgstr "" +msgstr "활성 경고 코드" #: common/setting/system.py:201 msgid "A dict of active warning codes" -msgstr "" +msgstr "활성 경고 코드의 딕셔너리" #: common/setting/system.py:207 msgid "Instance ID" -msgstr "" +msgstr "인스턴스 ID" #: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" -msgstr "" +msgstr "이 InvenTree 인스턴스의 고유 식별자" #: common/setting/system.py:213 msgid "Announce ID" -msgstr "" +msgstr "ID 알림" #: 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:221 msgid "Server Instance Name" -msgstr "" +msgstr "서버 인스턴스 이름" #: common/setting/system.py:223 msgid "String descriptor for the server instance" -msgstr "" +msgstr "서버 인스턴스를 설명하는 문자열" #: common/setting/system.py:227 msgid "Use instance name" -msgstr "" +msgstr "인스턴스 이름 사용" #: common/setting/system.py:228 msgid "Use the instance name in the title-bar" -msgstr "" +msgstr "제목 표시줄에 인스턴스 이름을 사용합니다" #: common/setting/system.py:233 msgid "Restrict showing `about`" -msgstr "" +msgstr "`about` 표시 제한" #: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" -msgstr "" +msgstr "`about` 모달을 슈퍼유저에게만 표시합니다" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "슈퍼유저 배너 표시" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "슈퍼유저로 로그인했을 때 UI에 경고 배너를 표시합니다" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "관리자 배너 표시" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "관리자로 로그인했을 때 UI에 경고 배너를 표시합니다" #: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" -msgstr "" +msgstr "회사명" #: common/setting/system.py:252 msgid "Internal company name" -msgstr "" +msgstr "내부 회사명" #: common/setting/system.py:256 msgid "Base URL" -msgstr "" +msgstr "기본 URL" #: common/setting/system.py:257 msgid "Base URL for server instance" -msgstr "" +msgstr "서버 인스턴스의 기본 URL" #: common/setting/system.py:263 msgid "Default Currency" -msgstr "" +msgstr "기본 통화" #: common/setting/system.py:264 msgid "Select base currency for pricing calculations" -msgstr "" +msgstr "가격 계산에 사용할 기준 통화를 선택합니다" #: common/setting/system.py:270 msgid "Supported Currencies" -msgstr "" +msgstr "지원 통화" #: common/setting/system.py:271 msgid "List of supported currency codes" -msgstr "" +msgstr "지원하는 통화 코드 목록" #: common/setting/system.py:277 msgid "Currency Update Interval" -msgstr "" +msgstr "환율 업데이트 간격" #: common/setting/system.py:278 msgid "How often to update exchange rates (set to zero to disable)" -msgstr "" +msgstr "환율을 업데이트하는 주기(0으로 설정하면 비활성화)" #: common/setting/system.py:280 common/setting/system.py:320 #: common/setting/system.py:333 common/setting/system.py:341 @@ -2609,2244 +2609,2256 @@ msgstr "" #: common/setting/system.py:1143 common/setting/system.py:1159 #: common/setting/system.py:1176 msgid "days" -msgstr "" +msgstr "일" #: common/setting/system.py:284 msgid "Currency Update Plugin" -msgstr "" +msgstr "환율 업데이트 플러그인" #: common/setting/system.py:285 msgid "Currency update plugin to use" -msgstr "" +msgstr "사용할 환율 업데이트 플러그인" #: common/setting/system.py:290 msgid "Download from URL" -msgstr "" +msgstr "URL에서 다운로드" #: common/setting/system.py:291 msgid "Allow download of remote images and files from external URL" -msgstr "" +msgstr "외부 URL에서 원격 이미지 및 파일 다운로드를 허용합니다" #: common/setting/system.py:296 msgid "Download Size Limit" -msgstr "" +msgstr "다운로드 크기 제한" #: common/setting/system.py:297 msgid "Maximum allowable download size for remote image" -msgstr "" +msgstr "원격 이미지의 최대 허용 다운로드 크기" #: common/setting/system.py:303 msgid "User-agent used to download from URL" -msgstr "" +msgstr "URL 다운로드에 사용할 User-Agent" #: 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 "" +msgstr "외부 URL에서 이미지 및 파일 다운로드에 사용되는 User-Agent를 재정의할 수 있습니다(비워두면 기본값)" #: common/setting/system.py:310 msgid "Strict URL Validation" -msgstr "" +msgstr "엄격한 URL 검증" #: common/setting/system.py:311 msgid "Require schema specification when validating URLs" -msgstr "" +msgstr "URL 검증 시 스키마 지정을 요구합니다" #: common/setting/system.py:316 msgid "Update Check Interval" -msgstr "" +msgstr "업데이트 확인 간격" #: common/setting/system.py:317 msgid "How often to check for updates (set to zero to disable)" -msgstr "" +msgstr "업데이트를 확인하는 주기(0으로 설정하면 비활성화)" #: common/setting/system.py:323 msgid "Automatic Backup" -msgstr "" +msgstr "자동 백업" #: common/setting/system.py:324 msgid "Enable automatic backup of database and media files" -msgstr "" +msgstr "데이터베이스 및 미디어 파일의 자동 백업을 활성화합니다" #: common/setting/system.py:329 msgid "Auto Backup Interval" -msgstr "" +msgstr "자동 백업 간격" #: common/setting/system.py:330 msgid "Specify number of days between automated backup events" -msgstr "" +msgstr "자동 백업 이벤트 사이의 일 수를 지정합니다" #: common/setting/system.py:336 msgid "Task Deletion Interval" -msgstr "" +msgstr "작업 삭제 간격" #: common/setting/system.py:338 msgid "Background task results will be deleted after specified number of days" -msgstr "" +msgstr "백그라운드 작업 결과는 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:345 msgid "Error Log Deletion Interval" -msgstr "" +msgstr "오류 로그 삭제 간격" #: common/setting/system.py:346 msgid "Error logs will be deleted after specified number of days" -msgstr "" +msgstr "오류 로그는 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:352 msgid "Notification Deletion Interval" -msgstr "" +msgstr "알림 삭제 간격" #: common/setting/system.py:354 msgid "User notifications will be deleted after specified number of days" -msgstr "" +msgstr "사용자 알림은 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:361 msgid "Email Deletion Interval" -msgstr "" +msgstr "이메일 삭제 간격" #: common/setting/system.py:363 msgid "Email messages will be deleted after specified number of days" -msgstr "" +msgstr "이메일 메시지는 지정한 일 수 이후 삭제됩니다" #: common/setting/system.py:370 msgid "Protect Email Log" -msgstr "" +msgstr "이메일 로그 보호" #: common/setting/system.py:371 msgid "Prevent deletion of email log entries" -msgstr "" +msgstr "이메일 로그 항목 삭제를 방지합니다" #: common/setting/system.py:376 msgid "Barcode Support" -msgstr "" +msgstr "바코드 지원" #: common/setting/system.py:377 msgid "Enable barcode scanner support in the web interface" -msgstr "" +msgstr "웹 인터페이스에서 바코드 스캐너 지원을 활성화합니다" #: common/setting/system.py:382 msgid "Store Barcode Results" -msgstr "" +msgstr "바코드 결과 저장" #: common/setting/system.py:383 msgid "Store barcode scan results in the database" -msgstr "" +msgstr "바코드 스캔 결과를 데이터베이스에 저장합니다" #: common/setting/system.py:388 msgid "Barcode Scans Maximum Count" -msgstr "" +msgstr "바코드 스캔 최대 개수" #: common/setting/system.py:389 msgid "Maximum number of barcode scan results to store" -msgstr "" +msgstr "저장할 바코드 스캔 결과의 최대 개수" #: common/setting/system.py:394 msgid "Barcode Input Delay" -msgstr "" +msgstr "바코드 입력 지연" #: common/setting/system.py:395 msgid "Barcode input processing delay time" -msgstr "" +msgstr "바코드 입력 처리 지연 시간" #: common/setting/system.py:401 msgid "Barcode Webcam Support" -msgstr "" +msgstr "바코드 웹캠 지원" #: common/setting/system.py:402 msgid "Allow barcode scanning via webcam in browser" -msgstr "" +msgstr "브라우저에서 웹캠을 통한 바코드 스캔을 허용합니다" #: common/setting/system.py:407 msgid "Barcode Show Data" -msgstr "" +msgstr "바코드 데이터 표시" #: common/setting/system.py:408 msgid "Display barcode data in browser as text" -msgstr "" +msgstr "브라우저에 바코드 데이터를 텍스트로 표시합니다" #: common/setting/system.py:413 msgid "Barcode Generation Plugin" -msgstr "" +msgstr "바코드 생성 플러그인" #: common/setting/system.py:414 msgid "Plugin to use for internal barcode data generation" -msgstr "" +msgstr "내부 바코드 데이터 생성에 사용할 플러그인" #: common/setting/system.py:419 msgid "Part Revisions" -msgstr "" +msgstr "부품 리비전" #: common/setting/system.py:420 msgid "Enable revision field for Part" -msgstr "" +msgstr "부품에 리비전 필드를 활성화합니다" #: common/setting/system.py:425 msgid "Assembly Revision Only" -msgstr "" +msgstr "조립품 리비전만" #: common/setting/system.py:426 msgid "Only allow revisions for assembly parts" -msgstr "" +msgstr "조립 부품에만 리비전을 허용합니다" #: common/setting/system.py:431 msgid "Allow Deletion from Assembly" -msgstr "" +msgstr "조립품에서 삭제 허용" #: common/setting/system.py:432 msgid "Allow deletion of parts which are used in an assembly" -msgstr "" +msgstr "조립품에 사용되는 부품의 삭제를 허용합니다" #: common/setting/system.py:437 msgid "IPN Regex" -msgstr "" +msgstr "IPN 정규식" #: common/setting/system.py:438 msgid "Regular expression pattern for matching Part IPN" -msgstr "" +msgstr "부품 IPN과 일치시키기 위한 정규식 패턴" #: common/setting/system.py:441 msgid "Allow Duplicate IPN" -msgstr "" +msgstr "IPN 중복 허용" #: common/setting/system.py:442 msgid "Allow multiple parts to share the same IPN" -msgstr "" +msgstr "여러 부품이 동일한 IPN을 공유하도록 허용합니다" #: common/setting/system.py:447 msgid "Allow Editing IPN" -msgstr "" +msgstr "IPN 편집 허용" #: common/setting/system.py:448 msgid "Allow changing the IPN value while editing a part" -msgstr "" +msgstr "부품 편집 중 IPN 값 변경을 허용합니다" #: common/setting/system.py:453 msgid "Copy Part BOM Data" -msgstr "" +msgstr "부품 BOM 데이터 복사" #: common/setting/system.py:454 msgid "Copy BOM data by default when duplicating a part" -msgstr "" +msgstr "부품을 복제할 때 기본으로 BOM 데이터를 복사합니다" #: common/setting/system.py:459 msgid "Copy Part Parameter Data" -msgstr "" +msgstr "부품 매개변수 데이터 복사" #: common/setting/system.py:460 msgid "Copy parameter data by default when duplicating a part" -msgstr "" +msgstr "부품을 복제할 때 기본으로 매개변수 데이터를 복사합니다" #: common/setting/system.py:465 msgid "Copy Part Test Data" -msgstr "" +msgstr "부품 테스트 데이터 복사" #: common/setting/system.py:466 msgid "Copy test data by default when duplicating a part" -msgstr "" +msgstr "부품을 복제할 때 기본으로 테스트 데이터를 복사합니다" #: common/setting/system.py:471 msgid "Copy Category Parameter Templates" -msgstr "" +msgstr "카테고리 매개변수 템플릿 복사" #: common/setting/system.py:472 msgid "Copy category parameter templates when creating a part" -msgstr "" +msgstr "부품을 생성할 때 카테고리 매개변수 템플릿을 복사합니다" #: common/setting/system.py:478 msgid "Parts are templates by default" -msgstr "" +msgstr "부품은 기본적으로 템플릿입니다" #: common/setting/system.py:484 msgid "Parts can be assembled from other components by default" -msgstr "" +msgstr "부품은 기본적으로 다른 구성요소로 조립할 수 있습니다" -#: common/setting/system.py:489 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:490 msgid "Parts can be used as sub-components by default" -msgstr "" +msgstr "부품은 기본적으로 하위 구성요소로 사용할 수 있습니다" #: common/setting/system.py:495 part/models.py:1271 msgid "Purchaseable" -msgstr "" +msgstr "구매 가능" #: common/setting/system.py:496 msgid "Parts are purchaseable by default" -msgstr "" +msgstr "부품은 기본적으로 구매 가능합니다" #: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 msgid "Salable" -msgstr "" +msgstr "판매 가능" #: common/setting/system.py:502 msgid "Parts are salable by default" -msgstr "" +msgstr "부품은 기본적으로 판매 가능합니다" #: common/setting/system.py:508 msgid "Parts are trackable by default" -msgstr "" +msgstr "부품은 기본적으로 추적 가능합니다" #: common/setting/system.py:513 part/models.py:1293 msgid "Virtual" -msgstr "" +msgstr "가상" #: common/setting/system.py:514 msgid "Parts are virtual by default" -msgstr "" +msgstr "부품은 기본적으로 가상입니다" #: common/setting/system.py:519 msgid "Show related parts" -msgstr "" +msgstr "관련 부품 표시" #: common/setting/system.py:520 msgid "Display related parts for a part" -msgstr "" +msgstr "부품에 대한 관련 부품을 표시합니다" #: common/setting/system.py:525 msgid "Initial Stock Data" -msgstr "" +msgstr "초기 재고 데이터" #: common/setting/system.py:526 msgid "Allow creation of initial stock when adding a new part" -msgstr "" +msgstr "새 부품 추가 시 초기 재고 생성을 허용합니다" #: common/setting/system.py:531 msgid "Initial Supplier Data" -msgstr "" +msgstr "초기 공급업체 데이터" #: common/setting/system.py:533 msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" +msgstr "새 부품 추가 시 초기 공급업체 데이터 생성을 허용합니다" #: common/setting/system.py:539 msgid "Part Name Display Format" -msgstr "" +msgstr "부품명 표시 형식" #: common/setting/system.py:540 msgid "Format to display the part name" -msgstr "" +msgstr "부품명을 표시하는 형식" #: common/setting/system.py:546 msgid "Part Category Default Icon" -msgstr "" +msgstr "부품 카테고리 기본 아이콘" #: common/setting/system.py:547 msgid "Part category default icon (empty means no icon)" -msgstr "" +msgstr "부품 카테고리 기본 아이콘(비워두면 아이콘 없음)" #: common/setting/system.py:552 msgid "Minimum Pricing Decimal Places" -msgstr "" +msgstr "가격 최소 소수 자릿수" #: common/setting/system.py:554 msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "" +msgstr "가격 데이터를 표시할 때 최소 소수 자릿수" #: common/setting/system.py:565 msgid "Maximum Pricing Decimal Places" -msgstr "" +msgstr "가격 최대 소수 자릿수" #: common/setting/system.py:567 msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "" +msgstr "가격 데이터를 표시할 때 최대 소수 자릿수" #: common/setting/system.py:578 msgid "Use Supplier Pricing" -msgstr "" +msgstr "공급업체 가격 사용" #: common/setting/system.py:580 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" +msgstr "전체 가격 계산에 공급업체 수량별 가격을 포함합니다" #: common/setting/system.py:586 msgid "Purchase History Override" -msgstr "" +msgstr "구매 이력 우선" #: common/setting/system.py:588 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" +msgstr "과거 구매 주문 가격이 공급업체 수량별 가격보다 우선합니다" #: common/setting/system.py:594 msgid "Use Stock Item Pricing" -msgstr "" +msgstr "재고 항목 가격 사용" #: common/setting/system.py:596 msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" +msgstr "가격 계산에 수동으로 입력한 재고 데이터의 가격을 사용합니다" #: common/setting/system.py:602 msgid "Stock Item Pricing Age" -msgstr "" +msgstr "재고 항목 가격 유효 기간" #: common/setting/system.py:604 msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" +msgstr "가격 계산에서 지정한 일 수보다 오래된 재고 항목을 제외합니다" #: common/setting/system.py:611 msgid "Use Variant Pricing" -msgstr "" +msgstr "변형(Variant) 가격 사용" #: common/setting/system.py:612 msgid "Include variant pricing in overall pricing calculations" -msgstr "" +msgstr "전체 가격 계산에 변형(Variant) 가격을 포함합니다" #: common/setting/system.py:617 msgid "Active Variants Only" -msgstr "" +msgstr "활성 변형만" #: common/setting/system.py:619 msgid "Only use active variant parts for calculating variant pricing" -msgstr "" +msgstr "변형(Variant) 가격 계산에 활성 변형 부품만 사용합니다" #: common/setting/system.py:625 msgid "Auto Update Pricing" -msgstr "" +msgstr "가격 자동 업데이트" #: common/setting/system.py:627 msgid "Automatically update part pricing when internal data changes" -msgstr "" +msgstr "내부 데이터가 변경되면 부품 가격을 자동으로 업데이트" #: common/setting/system.py:633 msgid "Pricing Rebuild Interval" -msgstr "" +msgstr "가격 재구성 간격" #: common/setting/system.py:634 msgid "Number of days before part pricing is automatically updated" -msgstr "" +msgstr "부품 가격이 자동으로 업데이트되기까지의 일 수" #: common/setting/system.py:640 msgid "Internal Prices" -msgstr "" +msgstr "내부 가격" #: common/setting/system.py:641 msgid "Enable internal prices for parts" -msgstr "" +msgstr "부품에 대해 내부 가격 사용" #: common/setting/system.py:646 msgid "Internal Price Override" -msgstr "" +msgstr "내부 가격 우선 적용" #: common/setting/system.py:648 msgid "If available, internal prices override price range calculations" -msgstr "" +msgstr "가능한 경우 내부 가격이 가격 범위 계산보다 우선합니다" #: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "BOM 수량 0 허용" #: 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:662 msgid "Enable label printing" -msgstr "" +msgstr "라벨 인쇄 사용" #: common/setting/system.py:663 msgid "Enable label printing from the web interface" -msgstr "" +msgstr "웹 인터페이스에서 라벨 인쇄를 사용합니다" #: common/setting/system.py:668 msgid "Label Image DPI" -msgstr "" +msgstr "라벨 이미지 DPI" #: common/setting/system.py:670 msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" +msgstr "라벨 인쇄 플러그인에 제공할 이미지 파일 생성 시 DPI 해상도" #: common/setting/system.py:676 msgid "Enable Reports" -msgstr "" +msgstr "보고서 사용" #: common/setting/system.py:677 msgid "Enable generation of reports" -msgstr "" +msgstr "보고서 생성을 사용합니다" #: common/setting/system.py:682 msgid "Debug Mode" -msgstr "" +msgstr "디버그 모드" #: common/setting/system.py:683 msgid "Generate reports in debug mode (HTML output)" -msgstr "" +msgstr "디버그 모드에서 보고서 생성(HTML 출력)" #: common/setting/system.py:688 msgid "Log Report Errors" -msgstr "" +msgstr "보고서 오류 로그" #: common/setting/system.py:689 msgid "Log errors which occur when generating reports" -msgstr "" +msgstr "보고서 생성 중 발생하는 오류를 기록합니다" #: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:384 msgid "Page Size" -msgstr "" +msgstr "페이지 크기" #: common/setting/system.py:695 msgid "Default page size for PDF reports" -msgstr "" +msgstr "PDF 보고서의 기본 페이지 크기" #: common/setting/system.py:700 msgid "Enforce Parameter Units" -msgstr "" +msgstr "매개변수 단위 강제" #: common/setting/system.py:702 msgid "If units are provided, parameter values must match the specified units" -msgstr "" +msgstr "단위가 제공된 경우, 매개변수 값은 지정된 단위와 일치해야 합니다" #: common/setting/system.py:708 msgid "Globally Unique Serials" -msgstr "" +msgstr "전역 고유 시리얼" #: common/setting/system.py:709 msgid "Serial numbers for stock items must be globally unique" -msgstr "" +msgstr "재고 항목의 시리얼 번호는 전역적으로 고유해야 합니다" #: common/setting/system.py:714 msgid "Delete Depleted Stock" -msgstr "" +msgstr "소진된 재고 삭제" #: common/setting/system.py:715 msgid "Determines default behavior when a stock item is depleted" -msgstr "" +msgstr "재고 항목이 소진되었을 때의 기본 동작을 결정합니다" #: common/setting/system.py:720 msgid "Batch Code Template" -msgstr "" +msgstr "배치 코드 템플릿" #: common/setting/system.py:721 msgid "Template for generating default batch codes for stock items" -msgstr "" +msgstr "재고 항목의 기본 배치 코드를 생성하기 위한 템플릿" #: common/setting/system.py:725 msgid "Stock Expiry" -msgstr "" +msgstr "재고 만료" #: common/setting/system.py:726 msgid "Enable stock expiry functionality" -msgstr "" +msgstr "재고 만료 기능 사용" #: common/setting/system.py:731 msgid "Sell Expired Stock" -msgstr "" +msgstr "만료 재고 판매" #: common/setting/system.py:732 msgid "Allow sale of expired stock" -msgstr "" +msgstr "만료된 재고의 판매를 허용합니다" #: common/setting/system.py:737 msgid "Stock Stale Time" -msgstr "" +msgstr "재고 경과 시간" #: common/setting/system.py:739 msgid "Number of days stock items are considered stale before expiring" -msgstr "" +msgstr "만료 전 재고 항목을 오래된 것으로 간주하는 일 수" #: common/setting/system.py:746 msgid "Build Expired Stock" -msgstr "" +msgstr "만료 재고로 빌드" #: common/setting/system.py:747 msgid "Allow building with expired stock" -msgstr "" +msgstr "만료된 재고로 빌드하는 것을 허용합니다" #: common/setting/system.py:752 msgid "Stock Ownership Control" -msgstr "" +msgstr "재고 소유권 제어" #: common/setting/system.py:753 msgid "Enable ownership control over stock locations and items" -msgstr "" +msgstr "재고 위치 및 항목에 대한 소유권 제어를 사용합니다" #: common/setting/system.py:758 msgid "Stock Location Default Icon" -msgstr "" +msgstr "재고 위치 기본 아이콘" #: common/setting/system.py:759 msgid "Stock location default icon (empty means no icon)" -msgstr "" +msgstr "재고 위치 기본 아이콘(비어 있으면 아이콘 없음)" #: common/setting/system.py:764 msgid "Show Installed Stock Items" -msgstr "" +msgstr "설치된 재고 항목 표시" #: common/setting/system.py:765 msgid "Display installed stock items in stock tables" -msgstr "" +msgstr "재고 표에서 설치된 재고 항목을 표시합니다" #: common/setting/system.py:770 msgid "Check BOM when installing items" -msgstr "" +msgstr "항목 설치 시 BOM 확인" #: common/setting/system.py:772 msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" +msgstr "설치된 재고 항목은 상위 부품의 BOM에 존재해야 합니다" #: common/setting/system.py:778 msgid "Allow Out of Stock Transfer" -msgstr "" +msgstr "재고 없음 상태 이동 허용" #: common/setting/system.py:780 msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" +msgstr "재고가 없는 재고 항목을 재고 위치 간에 이동할 수 있도록 허용합니다" #: common/setting/system.py:786 msgid "Build Order Reference Pattern" -msgstr "" +msgstr "작업 지시서 참조번호 패턴" #: common/setting/system.py:787 msgid "Required pattern for generating Build Order reference field" -msgstr "" +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 "" +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 "" +msgstr "각 주문에는 책임자가 지정되어야 합니다" #: common/setting/system.py:798 msgid "Require Active Part" -msgstr "" +msgstr "활성 부품 필수" #: common/setting/system.py:799 msgid "Prevent build order creation for inactive parts" -msgstr "" +msgstr "비활성 부품에 대해 작업 지시서 생성을 방지합니다" #: common/setting/system.py:804 msgid "Require Locked Part" -msgstr "" +msgstr "잠긴 부품 필수" #: common/setting/system.py:805 msgid "Prevent build order creation for unlocked parts" -msgstr "" +msgstr "잠기지 않은 부품에 대해 작업 지시서 생성을 방지합니다" #: common/setting/system.py:810 msgid "Require Valid BOM" -msgstr "" +msgstr "유효한 BOM 필수" #: common/setting/system.py:811 msgid "Prevent build order creation unless BOM has been validated" -msgstr "" +msgstr "BOM이 검증되지 않으면 작업 지시서 생성을 방지합니다" #: common/setting/system.py:816 msgid "Require Closed Child Orders" -msgstr "" +msgstr "하위 주문 종료 필수" #: common/setting/system.py:818 msgid "Prevent build order completion until all child orders are closed" -msgstr "" +msgstr "모든 하위 주문이 종료될 때까지 작업 지시서 완료를 방지합니다" #: common/setting/system.py:824 msgid "External Build Orders" -msgstr "" +msgstr "외주 생산 작업 지시서" #: common/setting/system.py:825 msgid "Enable external build order functionality" -msgstr "" +msgstr "외주 생산 작업 지시서 기능 사용" #: common/setting/system.py:830 msgid "Block Until Tests Pass" -msgstr "" +msgstr "테스트 통과 전까지 차단" #: common/setting/system.py:832 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" +msgstr "필수 테스트가 모두 통과될 때까지 생산 완제품 완료를 방지합니다" #: common/setting/system.py:838 msgid "Enable Return Orders" -msgstr "" +msgstr "반품 주문 사용" #: common/setting/system.py:839 msgid "Enable return order functionality in the user interface" -msgstr "" +msgstr "사용자 인터페이스에서 반품 주문 기능을 사용합니다" #: common/setting/system.py:844 msgid "Return Order Reference Pattern" -msgstr "" +msgstr "반품 주문 참조 패턴" #: common/setting/system.py:846 msgid "Required pattern for generating Return Order reference field" -msgstr "" +msgstr "반품 주문 참조 필드를 생성하기 위한 필수 패턴" #: common/setting/system.py:858 msgid "Edit Completed Return Orders" -msgstr "" +msgstr "완료된 반품 주문 편집" #: common/setting/system.py:860 msgid "Allow editing of return orders after they have been completed" -msgstr "" +msgstr "반품 주문이 완료된 후에도 편집을 허용합니다" #: common/setting/system.py:866 msgid "Sales Order Reference Pattern" -msgstr "" +msgstr "판매 주문 참조 패턴" #: common/setting/system.py:867 msgid "Required pattern for generating Sales Order reference field" -msgstr "" +msgstr "판매 주문 참조 필드를 생성하기 위한 필수 패턴" #: common/setting/system.py:878 msgid "Sales Order Default Shipment" -msgstr "" +msgstr "판매 주문 기본 배송" #: common/setting/system.py:879 msgid "Enable creation of default shipment with sales orders" -msgstr "" +msgstr "판매 주문과 함께 기본 배송 생성 사용" #: common/setting/system.py:884 msgid "Edit Completed Sales Orders" -msgstr "" +msgstr "완료된 판매 주문 편집" #: common/setting/system.py:886 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" +msgstr "판매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다" #: common/setting/system.py:892 msgid "Shipment Requires Checking" -msgstr "" +msgstr "배송 확인 필요" #: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "항목이 확인될 때까지 배송 완료를 방지합니다" #: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" -msgstr "" +msgstr "배송된 주문을 완료로 표시" #: 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:908 msgid "Purchase Order Reference Pattern" -msgstr "" +msgstr "구매 주문 참조 패턴" #: common/setting/system.py:910 msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +msgstr "구매 주문 참조 필드를 생성하기 위한 필수 패턴" #: common/setting/system.py:922 msgid "Edit Completed Purchase Orders" -msgstr "" +msgstr "완료된 구매 주문 편집" #: common/setting/system.py:924 msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" +msgstr "구매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다" #: common/setting/system.py:930 msgid "Convert Currency" -msgstr "" +msgstr "통화 변환" #: common/setting/system.py:931 msgid "Convert item value to base currency when receiving stock" -msgstr "" +msgstr "재고 수령 시 항목 값을 기준 통화로 변환합니다" #: common/setting/system.py:936 msgid "Auto Complete Purchase Orders" -msgstr "" +msgstr "구매 주문 자동 완료" #: common/setting/system.py:938 msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" +msgstr "모든 라인 항목을 수령하면 구매 주문을 자동으로 완료로 표시합니다" #: common/setting/system.py:945 msgid "Enable password forgot" -msgstr "" +msgstr "비밀번호 찾기 사용" #: common/setting/system.py:946 msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "로그인 페이지에서 비밀번호 찾기 기능을 사용합니다" #: common/setting/system.py:951 msgid "Enable registration" -msgstr "" +msgstr "회원가입 사용" #: common/setting/system.py:952 msgid "Enable self-registration for users on the login pages" -msgstr "" +msgstr "로그인 페이지에서 사용자 자기 등록(회원가입)을 사용합니다" #: common/setting/system.py:957 msgid "Enable SSO" -msgstr "" +msgstr "SSO 사용" #: common/setting/system.py:958 msgid "Enable SSO on the login pages" -msgstr "" +msgstr "로그인 페이지에서 SSO를 사용합니다" #: common/setting/system.py:963 msgid "Enable SSO registration" -msgstr "" +msgstr "SSO 등록 사용" #: common/setting/system.py:965 msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" +msgstr "로그인 페이지에서 SSO를 통한 자기 등록(회원가입)을 사용합니다" #: common/setting/system.py:971 msgid "Enable SSO group sync" -msgstr "" +msgstr "SSO 그룹 동기화 사용" #: common/setting/system.py:973 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" +msgstr "IdP에서 제공하는 그룹과 InvenTree 그룹의 동기화를 사용합니다" #: common/setting/system.py:979 msgid "SSO group key" -msgstr "" +msgstr "SSO 그룹 키" #: common/setting/system.py:980 msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" +msgstr "IdP에서 제공하는 groups 클레임 속성의 이름" #: common/setting/system.py:985 msgid "SSO group map" -msgstr "" +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 "" +msgstr "SSO 그룹을 로컬 InvenTree 그룹으로 매핑합니다. 로컬 그룹이 없으면 생성됩니다." #: common/setting/system.py:993 msgid "Remove groups outside of SSO" -msgstr "" +msgstr "SSO 외부 그룹 제거" #: 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 "" +msgstr "IdP에서 제공되지 않는 그룹이 사용자에게 할당되어 있으면 제거할지 여부입니다. 이 설정을 비활성화하면 보안 문제가 발생할 수 있습니다" #: common/setting/system.py:1001 msgid "Email required" -msgstr "" +msgstr "이메일 필수" #: common/setting/system.py:1002 msgid "Require user to supply mail on signup" -msgstr "" +msgstr "회원가입 시 이메일 입력을 요구합니다" #: common/setting/system.py:1007 msgid "Auto-fill SSO users" -msgstr "" +msgstr "SSO 사용자 자동 입력" #: common/setting/system.py:1008 msgid "Automatically fill out user-details from SSO account-data" -msgstr "" +msgstr "SSO 계정 데이터에서 사용자 상세 정보를 자동으로 채웁니다" #: common/setting/system.py:1013 msgid "Mail twice" -msgstr "" +msgstr "이메일 2회 입력" #: common/setting/system.py:1014 msgid "On signup ask users twice for their mail" -msgstr "" +msgstr "회원가입 시 이메일을 두 번 입력하도록 요청합니다" #: common/setting/system.py:1019 msgid "Password twice" -msgstr "" +msgstr "비밀번호 2회 입력" #: common/setting/system.py:1020 msgid "On signup ask users twice for their password" -msgstr "" +msgstr "회원가입 시 비밀번호를 두 번 입력하도록 요청합니다" #: common/setting/system.py:1025 msgid "Allowed domains" -msgstr "" +msgstr "허용된 도메인" #: common/setting/system.py:1027 msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" +msgstr "특정 도메인으로 회원가입을 제한합니다(쉼표로 구분, @로 시작)" #: common/setting/system.py:1033 msgid "Group on signup" -msgstr "" +msgstr "회원가입 시 그룹" #: 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 "" +msgstr "등록 시 새 사용자가 할당될 그룹입니다. SSO 그룹 동기화가 활성화된 경우, IdP에서 그룹을 할당할 수 없을 때만 이 그룹이 설정됩니다." #: common/setting/system.py:1041 msgid "Enforce MFA" -msgstr "" +msgstr "MFA 강제" #: common/setting/system.py:1042 msgid "Users must use multifactor security." -msgstr "" +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 "" +msgstr "이 설정을 활성화하면 모든 사용자가 다중 요소 인증을 설정해야 합니다. 모든 세션이 즉시 연결 해제됩니다." #: common/setting/system.py:1052 msgid "Check plugins on startup" -msgstr "" +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:1061 msgid "Check for plugin updates" -msgstr "" +msgstr "플러그인 업데이트 확인" #: common/setting/system.py:1062 msgid "Enable periodic checks for updates to installed plugins" -msgstr "" +msgstr "설치된 플러그인의 업데이트를 주기적으로 확인합니다" #: common/setting/system.py:1068 msgid "Enable URL integration" -msgstr "" +msgstr "URL 통합 사용" #: common/setting/system.py:1069 msgid "Enable plugins to add URL routes" -msgstr "" +msgstr "플러그인이 URL 라우트를 추가할 수 있도록 허용합니다" #: common/setting/system.py:1075 msgid "Enable navigation integration" -msgstr "" +msgstr "내비게이션 통합 사용" #: common/setting/system.py:1076 msgid "Enable plugins to integrate into navigation" -msgstr "" +msgstr "플러그인이 내비게이션에 통합될 수 있도록 허용합니다" #: common/setting/system.py:1082 msgid "Enable app integration" -msgstr "" +msgstr "앱 통합 사용" #: common/setting/system.py:1083 msgid "Enable plugins to add apps" -msgstr "" +msgstr "플러그인이 앱을 추가할 수 있도록 허용합니다" #: common/setting/system.py:1089 msgid "Enable schedule integration" -msgstr "" +msgstr "스케줄 통합 사용" #: common/setting/system.py:1090 msgid "Enable plugins to run scheduled tasks" -msgstr "" +msgstr "플러그인이 예약 작업을 실행할 수 있도록 허용합니다" #: common/setting/system.py:1096 msgid "Enable event integration" -msgstr "" +msgstr "이벤트 통합 사용" #: common/setting/system.py:1097 msgid "Enable plugins to respond to internal events" -msgstr "" +msgstr "플러그인이 내부 이벤트에 응답할 수 있도록 허용합니다" #: common/setting/system.py:1103 msgid "Enable interface integration" -msgstr "" +msgstr "인터페이스 통합 사용" #: common/setting/system.py:1104 msgid "Enable plugins to integrate into the user interface" -msgstr "" +msgstr "플러그인이 사용자 인터페이스에 통합될 수 있도록 허용합니다" #: common/setting/system.py:1110 msgid "Enable mail integration" -msgstr "" +msgstr "메일 통합 사용" #: common/setting/system.py:1111 msgid "Enable plugins to process outgoing/incoming mails" -msgstr "" +msgstr "플러그인이 발신/수신 메일을 처리할 수 있도록 허용합니다" #: common/setting/system.py:1117 msgid "Enable project codes" -msgstr "" +msgstr "프로젝트 코드 사용" #: common/setting/system.py:1118 msgid "Enable project codes for tracking projects" -msgstr "" +msgstr "프로젝트를 추적하기 위한 프로젝트 코드를 사용합니다" #: common/setting/system.py:1123 msgid "Enable Stocktake" -msgstr "" +msgstr "재고 실사 사용" #: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" -msgstr "" +msgstr "과거 재고 수준과 가치를 기록하는 기능을 사용합니다" #: common/setting/system.py:1131 msgid "Exclude External Locations" -msgstr "" +msgstr "외부 위치 제외" #: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "외부 위치의 재고 품목을 재고 실사 계산에서 제외합니다" #: common/setting/system.py:1139 msgid "Automatic Stocktake Period" -msgstr "" +msgstr "자동 재고 실사 주기" #: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "자동 재고 실사 기록 간격(일)" #: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "오래된 재고 실사 항목 삭제" #: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" +msgstr "지정된 일수보다 오래된 재고 실사 항목을 삭제합니다" #: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" -msgstr "" +msgstr "재고 실사 삭제 간격" #: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "재고 실사 항목은 지정된 일수 후 삭제됩니다" #: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "오래된 재고 추적 항목 삭제" #: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" +msgstr "지정된 일수보다 오래된 재고 추적 항목을 삭제합니다" #: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "재고 추적 삭제 간격" #: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "재고 추적 항목은 지정된 일수 후 삭제됩니다" #: common/setting/system.py:1180 msgid "Display Users full names" -msgstr "" +msgstr "사용자 전체 이름 표시" #: common/setting/system.py:1181 msgid "Display Users full names instead of usernames" -msgstr "" +msgstr "사용자 이름 대신 사용자 전체 이름을 표시합니다" #: common/setting/system.py:1186 msgid "Display User Profiles" -msgstr "" +msgstr "사용자 프로필 표시" #: common/setting/system.py:1187 msgid "Display Users Profiles on their profile page" -msgstr "" +msgstr "프로필 페이지에 사용자 프로필을 표시합니다" #: common/setting/system.py:1192 msgid "Enable Test Station Data" -msgstr "" +msgstr "테스트 스테이션 데이터 사용" #: common/setting/system.py:1193 msgid "Enable test station data collection for test results" -msgstr "" +msgstr "테스트 결과를 위한 테스트 스테이션 데이터 수집을 사용합니다" #: common/setting/system.py:1198 msgid "Enable Machine Ping" -msgstr "" +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" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" -msgstr "" +msgid "Receive error reports" +msgstr "오류 보고서 수신" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "시스템 오류에 대한 알림을 수신" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "마지막으로 사용한 인쇄 장비" + +#: common/setting/user.py:268 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 "" +msgstr "제조사가 활성화됨" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" -msgstr "" +msgstr "공급업체 부품이 활성화됨" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" -msgstr "" +msgstr "기본 공급업체 부품" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" -msgstr "" +msgstr "내부 부품이 활성화됨" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" -msgstr "" +msgstr "공급업체가 활성화됨" -#: company/api.py:274 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:281 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:291 +#: 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: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:705 -#: 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:666 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 +#: company/models.py:835 part/models.py:2300 msgid "base cost" -msgstr "" +msgstr "기본 비용" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "최소 요금(예: 보관 수수료)" -#: company/models.py:843 order/serializers.py:846 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 +#: company/models.py:870 part/models.py:2307 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: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: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:825 order/api.py:1527 msgid "Completed Before" -msgstr "" +msgstr "완료일 이전" #: 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: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:993 msgid "Order Complete" -msgstr "" +msgstr "주문 완료" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: 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:978 msgid "Completed" -msgstr "" +msgstr "완료됨" #: order/api.py:1234 msgid "Has Shipment" -msgstr "" +msgstr "배송 있음" #: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "배송을 찾을 수 없습니다" #: 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:1842 order/models.py:1288 order/models.py:2151 #: order/models.py:2332 order/models.py:2528 @@ -4855,2293 +4867,2293 @@ msgstr "" #: 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: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:1854 msgid "Select project code for this order" -msgstr "" +msgstr "이 주문의 프로젝트 코드를 선택하세요" #: 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:1842 order/serializers.py:295 +#: 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:642 order/models.py:1351 msgid "Order reference" -msgstr "" +msgstr "주문 참조" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" -msgstr "" +msgstr "상태" #: order/models.py:652 msgid "Purchase order status" -msgstr "" +msgstr "구매 주문 상태" #: order/models.py:667 msgid "Company from which the items are being ordered" -msgstr "" +msgstr "품목을 주문하는 공급업체" #: order/models.py:678 msgid "Supplier Reference" -msgstr "" +msgstr "공급업체 참조" #: order/models.py:679 msgid "Supplier order reference code" -msgstr "" +msgstr "공급업체 주문 참조 코드" #: order/models.py:688 msgid "received by" -msgstr "" +msgstr "수령자" #: order/models.py:695 order/models.py:2804 msgid "Date order was completed" -msgstr "" +msgstr "주문이 완료된 날짜" #: order/models.py:704 order/models.py:2031 msgid "Destination" -msgstr "" +msgstr "목적지" #: order/models.py:705 order/models.py:2035 msgid "Destination for received items" -msgstr "" +msgstr "수령된 품목의 목적지" #: order/models.py:751 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "부품 공급업체는 구매 주문 공급업체와 일치해야 합니다" #: order/models.py:1021 msgid "Line item does not match purchase order" -msgstr "" +msgstr "라인 항목이 구매 주문과 일치하지 않습니다" #: order/models.py:1024 msgid "Line item is missing a linked part" -msgstr "" +msgstr "라인 항목에 연결된 부품이 없습니다" #: order/models.py:1038 msgid "Quantity must be a positive number" -msgstr "" +msgstr "수량은 양수여야 합니다" #: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "가상 부품에는 일련번호를 할당할 수 없습니다" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: 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 "" +msgstr "고객" #: order/models.py:1363 msgid "Company to which the items are being sold" -msgstr "" +msgstr "품목을 판매하는 대상 회사" #: order/models.py:1376 msgid "Sales order status" -msgstr "" +msgstr "판매 주문 상태" #: order/models.py:1387 order/models.py:2796 msgid "Customer Reference " -msgstr "" +msgstr "고객 참조" #: order/models.py:1388 order/models.py:2797 msgid "Customer order reference code" -msgstr "" +msgstr "고객 주문 참조 코드" #: order/models.py:1392 order/models.py:2348 msgid "Shipment Date" -msgstr "" +msgstr "발송일" #: order/models.py:1401 msgid "shipped by" -msgstr "" +msgstr "발송자" #: order/models.py:1452 msgid "Order is already complete" -msgstr "" +msgstr "주문이 이미 완료되었습니다" #: order/models.py:1455 msgid "Order is already cancelled" -msgstr "" +msgstr "주문이 이미 취소되었습니다" #: order/models.py:1459 msgid "Only an open order can be marked as complete" -msgstr "" +msgstr "열린 주문만 완료로 표시할 수 있습니다" #: order/models.py:1463 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" +msgstr "미완료 발송이 있어 주문을 완료할 수 없습니다" #: order/models.py:1468 msgid "Order cannot be completed as there are incomplete allocations" -msgstr "" +msgstr "미완료 할당이 있어 주문을 완료할 수 없습니다" #: order/models.py:1477 msgid "Order cannot be completed as there are incomplete line items" -msgstr "" +msgstr "미완료 라인 항목이 있어 주문을 완료할 수 없습니다" #: order/models.py:1772 order/models.py:1788 msgid "The order is locked and cannot be modified" -msgstr "" +msgstr "이 주문은 잠겨 있어 수정할 수 없습니다" #: order/models.py:1796 msgid "Item quantity" -msgstr "" +msgstr "품목 수량" #: order/models.py:1814 msgid "Line Number" -msgstr "" +msgstr "라인 번호" #: order/models.py:1815 msgid "Line number for this item (optional)" -msgstr "" +msgstr "이 항목의 라인 번호(선택)" #: order/models.py:1822 msgid "Line item reference" -msgstr "" +msgstr "라인 항목 참조" #: order/models.py:1829 msgid "Line item notes" -msgstr "" +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:1874 msgid "Line item description (optional)" -msgstr "" +msgstr "라인 항목 설명(선택)" #: order/models.py:1881 msgid "Additional context for this line" -msgstr "" +msgstr "이 라인의 추가 정보" #: order/models.py:1891 msgid "Unit price" -msgstr "" +msgstr "단가" #: order/models.py:1910 msgid "Purchase Order Line Item" -msgstr "" +msgstr "구매 주문 라인 항목" #: order/models.py:1939 msgid "Supplier part must match supplier" -msgstr "" +msgstr "공급업체 부품은 공급업체와 일치해야 합니다" #: order/models.py:1944 msgid "Build order must be marked as external" -msgstr "" +msgstr "빌드 주문은 외부로 표시되어야 합니다" #: order/models.py:1951 msgid "Build orders can only be linked to assembly parts" -msgstr "" +msgstr "빌드 주문은 조립 부품에만 연결할 수 있습니다" #: order/models.py:1957 msgid "Build order part must match line item part" -msgstr "" +msgstr "빌드 주문 부품은 라인 항목 부품과 일치해야 합니다" #: order/models.py:1992 msgid "Supplier part" -msgstr "" +msgstr "공급업체 부품" #: order/models.py:1999 msgid "Received" -msgstr "" +msgstr "수령됨" #: order/models.py:2000 msgid "Number of items received" -msgstr "" +msgstr "수령된 품목 수" -#: order/models.py:2008 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:2009 msgid "Unit purchase price" -msgstr "" +msgstr "단위 구매 가격" #: order/models.py:2025 msgid "External Build Order to be fulfilled by this line item" -msgstr "" +msgstr "이 라인 항목으로 이행할 외주 생산 작업 지시서" #: order/models.py:2087 msgid "Purchase Order Extra Line" -msgstr "" +msgstr "구매 주문 추가 라인" #: order/models.py:2116 msgid "Sales Order Line Item" -msgstr "" +msgstr "판매 주문 라인 항목" #: order/models.py:2143 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "판매 가능한 부품만 판매 주문에 할당할 수 있습니다" #: order/models.py:2169 msgid "Sale Price" -msgstr "" +msgstr "판매 가격" #: order/models.py:2170 msgid "Unit sale price" -msgstr "" +msgstr "단위 판매 가격" #: order/models.py:2179 order/status_codes.py:50 msgid "Shipped" -msgstr "" +msgstr "발송됨" #: order/models.py:2180 msgid "Shipped quantity" -msgstr "" +msgstr "발송 수량" #: order/models.py:2292 msgid "Sales Order Shipment" -msgstr "" +msgstr "판매 주문 발송" #: order/models.py:2305 msgid "Shipment address must match the customer" -msgstr "" +msgstr "발송 주소는 고객과 일치해야 합니다" #: order/models.py:2341 msgid "Shipping address for this shipment" -msgstr "" +msgstr "이 발송의 배송지 주소" #: order/models.py:2349 msgid "Date of shipment" -msgstr "" +msgstr "발송 날짜" #: order/models.py:2355 msgid "Delivery Date" -msgstr "" +msgstr "배송일" #: order/models.py:2356 msgid "Date of delivery of shipment" -msgstr "" +msgstr "발송물 배송 날짜" #: order/models.py:2364 msgid "Checked By" -msgstr "" +msgstr "확인자" #: order/models.py:2365 msgid "User who checked this shipment" -msgstr "" +msgstr "이 발송을 확인한 사용자" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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:2373 msgid "Shipment number" -msgstr "" +msgstr "발송 번호" #: order/models.py:2381 msgid "Tracking Number" -msgstr "" +msgstr "운송장 번호" #: order/models.py:2382 msgid "Shipment tracking information" -msgstr "" +msgstr "발송 추적 정보" #: order/models.py:2389 msgid "Invoice Number" -msgstr "" +msgstr "송장 번호" #: order/models.py:2390 msgid "Reference number for associated invoice" -msgstr "" +msgstr "연결된 송장의 참조 번호" #: order/models.py:2436 msgid "Shipment has already been sent" -msgstr "" +msgstr "발송이 이미 전송되었습니다" #: order/models.py:2439 msgid "Shipment has no allocated stock items" -msgstr "" +msgstr "발송에 할당된 재고 품목이 없습니다" #: order/models.py:2446 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "발송은 완료하기 전에 확인되어야 합니다" #: order/models.py:2516 msgid "Sales Order Extra Line" -msgstr "" +msgstr "판매 주문 추가 라인" #: order/models.py:2545 msgid "Sales Order Allocation" -msgstr "" +msgstr "판매 주문 할당" #: order/models.py:2568 order/models.py:2570 msgid "Stock item has not been assigned" -msgstr "" +msgstr "재고 품목이 할당되지 않았습니다" #: order/models.py:2577 msgid "Cannot allocate stock item to a line with a different part" -msgstr "" +msgstr "부품이 다른 라인에 재고 품목을 할당할 수 없습니다" #: order/models.py:2580 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "부품이 없는 라인에는 재고를 할당할 수 없습니다" #: order/models.py:2583 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" +msgstr "할당 수량은 재고 수량을 초과할 수 없습니다" #: order/models.py:2599 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "할당 수량은 0보다 커야 합니다" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" -msgstr "" +msgstr "일련번호가 있는 재고 품목의 수량은 1이어야 합니다" #: order/models.py:2605 msgid "Sales order does not match shipment" -msgstr "" +msgstr "판매 주문이 발송과 일치하지 않습니다" #: order/models.py:2606 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" -msgstr "" +msgstr "발송이 판매 주문과 일치하지 않습니다" #: order/models.py:2614 msgid "Line" -msgstr "" +msgstr "라인" #: order/models.py:2625 msgid "Sales order shipment reference" -msgstr "" +msgstr "판매 주문 발송 참조" #: order/models.py:2638 order/models.py:3064 msgid "Item" -msgstr "" +msgstr "품목" #: order/models.py:2639 msgid "Select stock item to allocate" -msgstr "" +msgstr "할당할 재고 품목을 선택하세요" #: order/models.py:2648 msgid "Enter stock allocation quantity" -msgstr "" +msgstr "재고 할당 수량을 입력하세요" #: order/models.py:2765 msgid "Return Order reference" -msgstr "" +msgstr "반품 주문 참조" #: order/models.py:2777 msgid "Company from which items are being returned" -msgstr "" +msgstr "품목이 반품되는 회사" #: order/models.py:2790 msgid "Return order status" -msgstr "" +msgstr "반품 주문 상태" #: order/models.py:3022 msgid "Return Order Line Item" -msgstr "" +msgstr "반품 주문 라인 항목" #: order/models.py:3035 msgid "Stock item must be specified" -msgstr "" +msgstr "재고 품목을 지정해야 합니다" #: order/models.py:3039 msgid "Return quantity exceeds stock quantity" -msgstr "" +msgstr "반품 수량이 재고 수량을 초과합니다" #: order/models.py:3044 msgid "Return quantity must be greater than zero" -msgstr "" +msgstr "반품 수량은 0보다 커야 합니다" #: order/models.py:3049 msgid "Invalid quantity for serialized stock item" -msgstr "" +msgstr "일련번호가 있는 재고 품목에 대한 수량이 올바르지 않습니다" #: order/models.py:3065 msgid "Select item to return from customer" -msgstr "" +msgstr "고객에게서 반품받을 품목을 선택하세요" #: order/models.py:3080 msgid "Received Date" -msgstr "" +msgstr "수령일" #: order/models.py:3081 msgid "The date this return item was received" -msgstr "" +msgstr "이 반품 품목을 수령한 날짜" #: order/models.py:3093 msgid "Outcome" -msgstr "" +msgstr "결과" #: order/models.py:3094 msgid "Outcome for this line item" -msgstr "" +msgstr "이 라인 항목의 결과" #: order/models.py:3101 msgid "Cost associated with return or repair for this line item" -msgstr "" +msgstr "이 라인 항목의 반품 또는 수리에 관련된 비용" #: 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:432 +#: order/serializers.py:444 msgid "Supplier Name" -msgstr "" +msgstr "공급업체 이름" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" -msgstr "" +msgstr "주문을 취소할 수 없습니다" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" -msgstr "" +msgstr "미완료 라인 항목이 있어도 주문을 종료할 수 있도록 허용" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" -msgstr "" +msgstr "주문에 미완료 라인 항목이 있습니다" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" -msgstr "" +msgstr "주문이 열려 있지 않습니다" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" -msgstr "" +msgstr "자동 가격 책정" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" +msgstr "공급업체 부품 데이터를 기반으로 구매 가격을 자동으로 계산" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" -msgstr "" +msgstr "구매 가격 통화" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" -msgstr "" +msgstr "항목 병합" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" +msgstr "부품, 목적지, 목표일이 같은 항목을 하나의 라인 항목으로 병합" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" -msgstr "" +msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" -msgstr "" +msgstr "내부 부품 이름" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" -msgstr "" +msgstr "공급업체 부품을 지정해야 합니다" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" -msgstr "" +msgstr "구매 주문을 지정해야 합니다" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" -msgstr "" +msgstr "공급업체는 구매 주문과 일치해야 합니다" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" -msgstr "" +msgstr "구매 주문은 공급업체와 일치해야 합니다" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" -msgstr "" +msgstr "라인 항목" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" -msgstr "" - -#: order/serializers.py:821 -msgid "Enter batch code for incoming stock items" -msgstr "" - -#: order/serializers.py:828 stock/models.py:1167 -#: templates/email/stale_stock_notification.html:22 users/models.py:137 -msgid "Expiry Date" -msgstr "" - -#: order/serializers.py:829 -msgid "Enter expiry date for incoming stock items" -msgstr "" - -#: order/serializers.py:837 -msgid "Enter serial numbers for incoming stock items" -msgstr "" - -#: order/serializers.py:847 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:855 order/serializers.py:2037 -msgid "Additional note for incoming stock items" -msgstr "" +msgstr "수령 품목의 목적지 위치를 선택하세요" #: order/serializers.py:862 +msgid "Enter batch code for incoming stock items" +msgstr "입고 재고 품목의 배치 코드를 입력하세요" + +#: 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:870 +msgid "Enter expiry date for incoming stock items" +msgstr "입고 재고 품목의 만료일을 입력하세요" + +#: order/serializers.py:878 +msgid "Enter serial numbers for incoming stock items" +msgstr "입고 재고 품목의 일련번호를 입력하세요" + +#: order/serializers.py:888 +msgid "Override packaging information for incoming stock items" +msgstr "입고 재고 품목의 포장 정보를 재정의" + +#: order/serializers.py:896 order/serializers.py:2145 +msgid "Additional note for incoming stock items" +msgstr "입고 재고 품목에 대한 추가 메모" + +#: order/serializers.py:903 msgid "Barcode" -msgstr "" +msgstr "바코드" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" -msgstr "" +msgstr "스캔된 바코드" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" -msgstr "" +msgstr "바코드가 이미 사용 중입니다" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" -msgstr "" +msgstr "라인 항목을 제공해야 합니다" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" -msgstr "" +msgstr "목적지 위치를 지정해야 합니다" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" -msgstr "" +msgstr "제공된 바코드 값은 고유해야 합니다" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" -msgstr "" +msgstr "발송" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" -msgstr "" +msgstr "완료된 발송" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" -msgstr "" +msgstr "할당된 라인" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" -msgstr "" +msgstr "판매 가격 통화" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" -msgstr "" +msgstr "할당된 품목" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" -msgstr "" +msgstr "발송 세부 정보가 제공되지 않았습니다" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" -msgstr "" +msgstr "라인 항목이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" -msgstr "" +msgstr "수량은 양수여야 합니다" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" -msgstr "" +msgstr "할당할 일련번호를 입력하세요" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" -msgstr "" +msgstr "발송이 이미 발송되었습니다" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" -msgstr "" +msgstr "발송이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" -msgstr "" +msgstr "다음 일련번호에 대한 일치 항목을 찾을 수 없습니다" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" -msgstr "" +msgstr "다음 일련번호는 사용할 수 없습니다" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" -msgstr "" +msgstr "반품 주문 라인 항목" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" -msgstr "" +msgstr "라인 항목이 반품 주문과 일치하지 않습니다" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" -msgstr "" +msgstr "라인 항목이 이미 수령되었습니다" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" -msgstr "" +msgstr "진행 중인 주문에 대해서만 품목을 수령할 수 있습니다" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" -msgstr "" +msgstr "반품 수량" -#: order/serializers.py:2137 +#: 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 +#: part/api.py:654 msgid "Is Variant" -msgstr "" +msgstr "변형 여부" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" -msgstr "" +msgstr "리비전 여부" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" -msgstr "" +msgstr "리비전 있음" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" -msgstr "" - -#: part/api.py:961 -msgid "Cascade Categories" -msgstr "" +msgstr "BOM 유효" #: part/api.py:962 +msgid "Cascade Categories" +msgstr "카테고리 계층 포함" + +#: part/api.py:963 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "참이면 지정된 카테고리의 하위 카테고리에 있는 항목을 포함합니다" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "숫자 카테고리 ID 또는 'null' 값으로 필터" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" -msgstr "" +msgstr "조립 부품이 활성 상태" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" -msgstr "" +msgstr "조립 부품을 추적할 수 있음" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" -msgstr "" +msgstr "조립 부품을 테스트할 수 있음" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" -msgstr "" +msgstr "구성 부품이 활성 상태" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" -msgstr "" +msgstr "구성 부품을 추적할 수 있음" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" -msgstr "" +msgstr "구성 부품을 테스트할 수 있음" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" -msgstr "" +msgstr "구성 부품이 조립품임" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" -msgstr "" +msgstr "구성 부품이 가상 부품임" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" -msgstr "" +msgstr "사용 가능한 재고 있음" -#: part/api.py:1370 +#: part/api.py:1371 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 +#: part/models.py:93 users/ruleset.py:28 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:29 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: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 +#: part/models.py:2308 msgid "Sell multiple" -msgstr "" +msgstr "판매 배수" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" -msgstr "" +msgstr "가격 계산 캐시에 사용되는 통화" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" -msgstr "" +msgstr "최소 BOM 비용" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" -msgstr "" +msgstr "구성 부품의 최소 비용" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" -msgstr "" +msgstr "최대 BOM 비용" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" -msgstr "" +msgstr "구성 부품의 최대 비용" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" -msgstr "" +msgstr "최소 구매 비용" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" -msgstr "" +msgstr "과거 구매 비용의 최소값" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" -msgstr "" +msgstr "최대 구매 비용" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" -msgstr "" +msgstr "과거 구매 비용의 최대값" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" -msgstr "" +msgstr "최소 내부 가격" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" -msgstr "" +msgstr "내부 가격 구간에 기반한 최소 비용" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" -msgstr "" +msgstr "최대 내부 가격" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" -msgstr "" +msgstr "내부 가격 구간에 기반한 최대 비용" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" -msgstr "" +msgstr "최소 공급업체 가격" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" -msgstr "" +msgstr "외부 공급업체로부터의 최소 가격" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" -msgstr "" +msgstr "최대 공급업체 가격" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" -msgstr "" +msgstr "외부 공급업체로부터의 최대 가격" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" -msgstr "" +msgstr "최소 변형 비용" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" -msgstr "" +msgstr "변형 부품의 계산된 최소 비용" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" -msgstr "" +msgstr "최대 변형 비용" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" -msgstr "" +msgstr "변형 부품의 계산된 최대 비용" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" -msgstr "" +msgstr "최소 비용" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" -msgstr "" +msgstr "최소 비용 재정의" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" -msgstr "" +msgstr "최대 비용" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" -msgstr "" +msgstr "최대 비용 재정의" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" -msgstr "" +msgstr "계산된 전체 최소 비용" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" -msgstr "" +msgstr "계산된 전체 최대 비용" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" -msgstr "" +msgstr "최소 판매 가격" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" -msgstr "" +msgstr "가격 구간에 기반한 최소 판매 가격" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" -msgstr "" +msgstr "최대 판매 가격" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" -msgstr "" +msgstr "가격 구간에 기반한 최대 판매 가격" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" -msgstr "" +msgstr "최소 판매 비용" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" -msgstr "" +msgstr "과거 판매 가격의 최소값" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" -msgstr "" +msgstr "최대 판매 비용" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" -msgstr "" +msgstr "과거 판매 가격의 최대값" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" -msgstr "" - -#: part/models.py:3467 -msgid "Item Count" -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 "" +msgid "Item Count" +msgstr "항목 수" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3477 +msgid "Number of individual stock entries at time of stocktake" +msgstr "재고 조사 시점의 개별 재고 항목 수" + +#: part/models.py:3485 +msgid "Total available stock at time of stocktake" +msgstr "재고 조사 시점의 사용 가능한 총 재고" + +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" -msgstr "" +msgstr "날짜" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" -msgstr "" +msgstr "재고 조사가 수행된 날짜" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" -msgstr "" +msgstr "최소 재고 비용" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" -msgstr "" +msgstr "보유 재고의 추정 최소 비용" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" -msgstr "" +msgstr "최대 재고 비용" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" -msgstr "" +msgstr "보유 재고의 추정 최대 비용" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" -msgstr "" +msgstr "부품 판매 가격 구간" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" -msgstr "" +msgstr "부품 테스트 템플릿" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" +msgstr "템플릿 이름이 올바르지 않습니다 - 영숫자 문자를 최소 1개 포함해야 합니다" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" -msgstr "" +msgstr "테스트 템플릿은 테스트 가능한 부품에만 만들 수 있습니다" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" -msgstr "" +msgstr "같은 키의 테스트 템플릿이 이 부품에 이미 존재합니다" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" -msgstr "" +msgstr "테스트 이름" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" -msgstr "" - -#: part/models.py:3716 -msgid "Test Key" -msgstr "" - -#: part/models.py:3717 -msgid "Simplified key for the test" -msgstr "" - -#: part/models.py:3724 -msgid "Test Description" -msgstr "" +msgstr "테스트 이름을 입력하세요" #: part/models.py:3725 -msgid "Enter description for this test" -msgstr "" +msgid "Test Key" +msgstr "테스트 키" -#: part/models.py:3729 -msgid "Is this test enabled?" -msgstr "" +#: part/models.py:3726 +msgid "Simplified key for the test" +msgstr "테스트를 위한 단순화된 키" + +#: part/models.py:3733 +msgid "Test Description" +msgstr "테스트 설명" #: part/models.py:3734 +msgid "Enter description for this test" +msgstr "이 테스트에 대한 설명을 입력하세요" + +#: part/models.py:3738 +msgid "Is this test enabled?" +msgstr "이 테스트가 활성화되어 있나요?" + +#: part/models.py:3743 msgid "Required" -msgstr "" +msgstr "필수" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" -msgstr "" +msgstr "이 테스트는 통과가 필수인가요?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" -msgstr "" +msgstr "값 필요" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" -msgstr "" - -#: part/models.py:3746 -msgid "Requires Attachment" -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 "Requires Attachment" +msgstr "첨부 필요" + +#: part/models.py:3757 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "테스트 결과를 추가할 때 파일 첨부가 필요한가요?" + +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" -msgstr "" +msgstr "이 테스트의 유효한 선택지(쉼표로 구분)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" -msgstr "" +msgstr "조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" +msgstr "변형 조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" -msgstr "" - -#: part/models.py:3976 -msgid "Sub part" -msgstr "" - -#: part/models.py:3977 -msgid "Select part to be used in BOM" -msgstr "" +msgstr "상위 부품을 선택하세요" #: part/models.py:3988 -msgid "BOM quantity for this BOM item" -msgstr "" +msgid "Sub part" +msgstr "하위 부품" -#: part/models.py:3994 -msgid "This BOM item is optional" -msgstr "" +#: part/models.py:3989 +msgid "Select part to be used in BOM" +msgstr "BOM에 사용할 부품을 선택하세요" #: part/models.py:4000 +msgid "BOM quantity for this BOM item" +msgstr "이 BOM 항목의 BOM 수량" + +#: part/models.py:4006 +msgid "This BOM item is optional" +msgstr "이 BOM 항목은 선택 사항입니다" + +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" +msgstr "이 BOM 항목은 소모품입니다(제작 주문에서 추적되지 않음)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" -msgstr "" +msgstr "설정 수량" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" -msgstr "" +msgstr "설정 손실을 고려해 제작에 추가로 필요한 수량" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" -msgstr "" +msgstr "손실률" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" -msgstr "" +msgstr "제작 손실률 추정치(백분율, 0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" -msgstr "" +msgstr "반올림 배수" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" -msgstr "" +msgstr "필요 생산 수량을 이 값의 가장 가까운 배수로 올림합니다" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" -msgstr "" - -#: part/models.py:4048 -msgid "BOM item notes" -msgstr "" - -#: part/models.py:4054 -msgid "Checksum" -msgstr "" - -#: part/models.py:4055 -msgid "BOM line checksum" -msgstr "" +msgstr "BOM 항목 참조" #: part/models.py:4060 -msgid "Validated" -msgstr "" - -#: part/models.py:4061 -msgid "This BOM item has been validated" -msgstr "" +msgid "BOM item notes" +msgstr "BOM 항목 메모" #: part/models.py:4066 -msgid "Gets inherited" -msgstr "" +msgid "Checksum" +msgstr "체크섬" #: part/models.py:4067 -msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" +msgid "BOM line checksum" +msgstr "BOM 라인 체크섬" + +#: part/models.py:4072 +msgid "Validated" +msgstr "검증됨" #: part/models.py:4073 +msgid "This BOM item has been validated" +msgstr "이 BOM 항목이 검증되었습니다" + +#: part/models.py:4078 +msgid "Gets inherited" +msgstr "상속됨" + +#: part/models.py:4079 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "이 BOM 항목은 변형 부품의 BOM에 상속됩니다" + +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" +msgstr "변형 부품의 재고 항목을 이 BOM 항목에 사용할 수 있습니다" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" -msgstr "" +msgstr "추적 가능한 부품의 수량은 정수여야 합니다" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" -msgstr "" +msgstr "하위 부품을 지정해야 합니다" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" -msgstr "" +msgstr "BOM 항목 대체품" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" -msgstr "" +msgstr "대체 부품은 기준 부품과 같을 수 없습니다" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" -msgstr "" +msgstr "상위 BOM 항목" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" -msgstr "" +msgstr "대체 부품" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" -msgstr "" +msgstr "부품 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" -msgstr "" +msgstr "부품 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" -msgstr "" +msgstr "관련 부품 선택" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" -msgstr "" +msgstr "이 관계에 대한 메모" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" -msgstr "" +msgstr "부품과 자기 자신 사이에는 부품 관계를 만들 수 없습니다" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 @@ -7162,1056 +7174,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: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:344 plugin/serializers.py:169 #: plugin/serializers.py:275 msgid "Only superuser accounts can administer plugins" -msgstr "" +msgstr "슈퍼유저 계정만 플러그인을 관리할 수 있습니다" #: plugin/installer.py:243 msgid "Plugin installation is disabled" -msgstr "" +msgstr "플러그인 설치가 비활성화되어 있습니다" #: plugin/installer.py:273 msgid "No package name or URL provided for installation" -msgstr "" +msgstr "설치할 패키지 이름 또는 URL이 제공되지 않았습니다" #: plugin/installer.py:277 msgid "Invalid characters in package name or URL" -msgstr "" +msgstr "패키지 이름 또는 URL에 잘못된 문자가 있습니다" #: plugin/installer.py:287 msgid "Installed plugin successfully" -msgstr "" +msgstr "플러그인을 성공적으로 설치했습니다" #: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" -msgstr "" +msgstr "플러그인을 {path}에 설치했습니다" #: plugin/installer.py:318 msgid "Plugin was not found in registry" -msgstr "" +msgstr "레지스트리에서 플러그인을 찾을 수 없습니다" #: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" -msgstr "" +msgstr "플러그인이 패키지 플러그인이 아닙니다" #: plugin/installer.py:324 msgid "Plugin package name not found" -msgstr "" +msgstr "플러그인 패키지 이름을 찾을 수 없습니다" #: plugin/installer.py:327 msgid "Only staff users can administer plugins" -msgstr "" +msgstr "스태프 사용자만 플러그인을 관리할 수 있습니다" #: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" -msgstr "" +msgstr "플러그인 제거가 비활성화되어 있습니다" #: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" +msgstr "플러그인이 현재 활성 상태이므로 제거할 수 없습니다" #: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" -msgstr "" +msgstr "플러그인이 필수이므로 제거할 수 없습니다" #: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" -msgstr "" +msgstr "플러그인이 샘플 플러그인이므로 제거할 수 없습니다" #: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" -msgstr "" +msgstr "플러그인이 내장 플러그인이므로 제거할 수 없습니다" #: plugin/installer.py:371 msgid "Plugin is not installed" -msgstr "" +msgstr "플러그인이 설치되어 있지 않습니다" #: plugin/installer.py:389 msgid "Plugin installation not found" -msgstr "" +msgstr "플러그인 설치 정보를 찾을 수 없습니다" #: 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 +#: plugin/plugin.py:388 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:191 msgid "Full reload" -msgstr "" +msgstr "전체 다시 로드" #: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" -msgstr "" +msgstr "플러그인 레지스트리를 전체 다시 로드합니다" #: plugin/serializers.py:198 msgid "Force reload" -msgstr "" +msgstr "강제 다시 로드" #: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" +msgstr "이미 로드되어 있더라도 플러그인 레지스트리를 강제로 다시 로드합니다" #: plugin/serializers.py:207 msgid "Collect plugins" -msgstr "" +msgstr "플러그인 수집" #: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" -msgstr "" +msgstr "플러그인을 수집하여 레지스트리에 추가합니다" #: plugin/serializers.py:236 msgid "Activate Plugin" -msgstr "" +msgstr "플러그인 활성화" #: plugin/serializers.py:237 msgid "Activate this plugin" -msgstr "" +msgstr "이 플러그인을 활성화합니다" #: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" -msgstr "" +msgstr "필수 플러그인은 비활성화할 수 없습니다" #: plugin/serializers.py:264 msgid "Delete configuration" -msgstr "" +msgstr "구성 삭제" #: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" -msgstr "" +msgstr "데이터베이스에서 플러그인 구성을 삭제합니다" #: plugin/serializers.py:299 msgid "The user for which this setting applies" -msgstr "" +msgstr "이 설정이 적용될 사용자" #: 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: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:220 msgid "Template name" -msgstr "" +msgstr "템플릿 이름" #: report/models.py:226 msgid "Template description" -msgstr "" +msgstr "템플릿 설명" #: report/models.py:232 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "리비전 번호(자동 증가)" #: report/models.py:238 msgid "Attach to Model on Print" -msgstr "" +msgstr "인쇄 시 모델에 첨부" #: report/models.py:240 msgid "Save report output as an attachment against linked model instance when printing" -msgstr "" +msgstr "인쇄 시 보고서 출력물을 연결된 모델 인스턴스에 첨부파일로 저장합니다" #: report/models.py:284 msgid "Filename Pattern" -msgstr "" +msgstr "파일명 패턴" #: report/models.py:285 msgid "Pattern for generating filenames" -msgstr "" +msgstr "파일명을 생성하기 위한 패턴" #: report/models.py:290 msgid "Template is enabled" -msgstr "" +msgstr "템플릿이 활성화됨" #: report/models.py:297 msgid "Target model type for template" -msgstr "" +msgstr "템플릿 대상 모델 유형" #: report/models.py:317 msgid "Filters" -msgstr "" +msgstr "필터" #: report/models.py:318 msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +msgstr "템플릿 쿼리 필터(쉼표로 구분된 key=value 쌍 목록)" #: report/models.py:377 report/models.py:673 msgid "Template file" -msgstr "" +msgstr "템플릿 파일" #: report/models.py:385 msgid "Page size for PDF reports" -msgstr "" +msgstr "PDF 보고서 페이지 크기" #: report/models.py:391 msgid "Render report in landscape orientation" -msgstr "" +msgstr "보고서를 가로 방향으로 렌더링" #: report/models.py:396 msgid "Merge" -msgstr "" +msgstr "병합" #: report/models.py:397 msgid "Render a single report against selected items" -msgstr "" +msgstr "선택한 항목에 대해 단일 보고서를 렌더링합니다" #: report/models.py:452 #, python-brace-format msgid "Report generated from template {self.name}" -msgstr "" +msgstr "템플릿 {self.name}에서 생성된 보고서" #: report/models.py:549 report/models.py:588 report/models.py:589 msgid "Template syntax error" -msgstr "" +msgstr "템플릿 구문 오류" #: report/models.py:556 report/models.py:595 msgid "Error rendering report" -msgstr "" +msgstr "보고서 렌더링 오류" #: report/models.py:615 msgid "Error generating report" -msgstr "" +msgstr "보고서 생성 오류" #: report/models.py:647 msgid "Error merging report outputs" -msgstr "" +msgstr "보고서 출력 병합 오류" #: report/models.py:679 msgid "Width [mm]" -msgstr "" +msgstr "너비 [mm]" #: report/models.py:680 msgid "Label width, specified in mm" -msgstr "" +msgstr "라벨 너비(mm)" #: report/models.py:686 msgid "Height [mm]" -msgstr "" +msgstr "높이 [mm]" #: report/models.py:687 msgid "Label height, specified in mm" -msgstr "" +msgstr "라벨 높이(mm)" #: report/models.py:792 msgid "Error printing labels" -msgstr "" +msgstr "라벨 인쇄 오류" #: report/models.py:811 msgid "Snippet" -msgstr "" +msgstr "스니펫" #: report/models.py:812 msgid "Report snippet file" -msgstr "" +msgstr "보고서 스니펫 파일" #: report/models.py:819 msgid "Snippet file description" -msgstr "" +msgstr "스니펫 파일 설명" #: report/models.py:837 msgid "Asset" -msgstr "" +msgstr "자산" #: report/models.py:838 msgid "Report asset file" -msgstr "" +msgstr "보고서 자산 파일" #: report/models.py:845 msgid "Asset file description" -msgstr "" +msgstr "자산 파일 설명" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "보고서 템플릿을 저장하려면 사용자 인증이 필요합니다" #: report/serializers.py:118 msgid "Select report template" -msgstr "" +msgstr "보고서 템플릿 선택" #: report/serializers.py:126 report/serializers.py:176 msgid "List of item primary keys to include in the report" -msgstr "" +msgstr "보고서에 포함할 항목의 기본 키 목록" #: report/serializers.py:159 msgid "Select label template" -msgstr "" +msgstr "라벨 템플릿 선택" #: report/serializers.py:167 msgid "Printing Plugin" -msgstr "" +msgstr "인쇄 플러그인" #: 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 @@ -8222,43 +8234,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 @@ -8266,1069 +8278,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: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 +#: stock/models.py:148 users/ruleset.py:31 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 @@ -9340,357 +9352,361 @@ 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 +#: users/ruleset.py:27 msgid "Admin" -msgstr "" +msgstr "관리자" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "구매 주문" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "판매 주문" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" -msgstr "" +msgstr "사용자가 인증되어야 합니다" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" -msgstr "" +msgstr "슈퍼유저만 다른 사용자의 토큰을 만들 수 있습니다" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" -msgstr "" +msgstr "관리자" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" -msgstr "" +msgstr "이 사용자에게 관리자 권한이 있습니까" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" -msgstr "" +msgstr "슈퍼유저" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" -msgstr "" +msgstr "이 사용자는 슈퍼유저입니까" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" -msgstr "" +msgstr "이 사용자 계정이 활성 상태입니까" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" -msgstr "" - -#: users/serializers.py:372 -msgid "Password" -msgstr "" - -#: users/serializers.py:373 -msgid "Password for the user" -msgstr "" +msgstr "슈퍼유저만 이 필드를 조정할 수 있습니다" #: users/serializers.py:379 -msgid "Override warning" -msgstr "" +msgid "Password" +msgstr "비밀번호" #: users/serializers.py:380 +msgid "Password for the user" +msgstr "사용자의 비밀번호" + +#: users/serializers.py:386 +msgid "Override warning" +msgstr "경고 무시" + +#: users/serializers.py:387 msgid "Override the warning about password rules" -msgstr "" +msgstr "비밀번호 규칙에 대한 경고를 무시합니다" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" -msgstr "" +msgstr "스태프" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" -msgstr "" +msgstr "이 사용자에게 스태프 권한이 있습니까" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" -msgstr "" +msgstr "사용자를 생성할 권한이 없습니다" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." -msgstr "" +msgstr "계정이 생성되었습니다." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" -msgstr "" +msgstr "로그인하려면 비밀번호 재설정 기능을 사용하세요" -#: users/serializers.py:490 +#: 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 7bd0e70d68..1578b0f5fe 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -665,89 +665,89 @@ msgstr "Maksimali data" msgid "Exclude Tree" msgstr "Neįtraukti medžio struktūros" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Pasirinktinai" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Sekama" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testuojama" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Priskirta" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Gamybos užsakymai" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Šaltinio vieta" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Išdavė" msgid "User who issued this build order" msgstr "Vartotojas, kuris išdavė šį gamybos užsakymą" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Atsakingas" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Vartotojas ar grupė, atsakinga už šį gamybos užsakymą" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Išorinė nuoroda" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Nuoroda į išorinį URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Gamybos prioritetas" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Šio gamybos užsakymo prioritetas" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projekto kodas" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Šio gamybos užsakymo projekto kodas" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Nepavyko perduoti užduoties, kad būtų atlikti gamybos paskirstymai" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Gamybos užsakymas {build} užbaigtas" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Gamybos užsakymas užbaigtas" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Sekamoms detalėms būtina nurodyti serijos numerius" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nepateiktas gamybos rezultatas" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Gamybos rezultatas jau užbaigtas" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Gamybos rezultatas {serial} nepraėjo visų privalomų testų" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Gamybos užsakymo eilutės įrašas" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Gamybos objektas" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Kiekis" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Reikalingas kiekis gamybos užsakymui" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gamybos elementas turi nurodyti rezultatą, nes pagrindinė detalė pažymėta kaip sekama" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Pasirinktas atsargų elementas neatitinka BOM eilutės" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Atsargoms su serijos numeriais kiekis turi būti 1" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Priskirtas kiekis ({q}) negali viršyti galimo atsargų kiekio ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Šaltinio atsargų elementas" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Atsargų kiekis, skirtas paskirstyti į gamybą" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Įdiegti į" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Paskirties atsargų elementas" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Gamybos lygis" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Detalės pavadinimas" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Gamybos rezultatas" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Gamybos rezultatas neatitinka pirminės gamybos" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "Rezultato detalė neatitinka gamybos užsakymo detalės" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "Šis gamybos rezultatas jau užbaigtas" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Įveskite kiekį gamybos rezultatui" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Sekamoms detalėms reikalingas sveikasis kiekis" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 msgid "Enter serial numbers for build outputs" msgstr "Įveskite serijos numerius gamybos rezultatams" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Atsargų vieta gamybos rezultatams" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Automatiškai priskirti serijos numerius" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Atsargų vieta brokuotiems rezultatams" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Atmesti priskyrimus" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Atmesti visus atsargų priskyrimus brokuotiems rezultatams" -#: build/serializers.py:498 +#: build/serializers.py:506 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:564 msgid "Location for completed build outputs" msgstr "Vieta, kur laikomi užbaigti gamybos rezultatai" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Priimti nepilną priskyrimą" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Sunaudoti priskirtas atsargas" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Pašalinti nebaigtus rezultatus" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "Ištrinti visus nebaigtus gamybos rezultatus" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "Neleidžiama" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Priimti kaip sunaudotą šio gamybos užsakymo metu" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "Panaikinkite priskyrimus prieš užbaigiant šį gamybos užsakymą" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Per daug paskirstytos atsargos" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Kai kurios atsargos paskirstytos per daug" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Priimti nepriskirtą" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Reikalingos atsargos nėra visiškai priskirtos" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Priimti nepilną" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Reikalingas gamybos kiekis nebuvo užbaigtas" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "Gamybos užsakymas turi nebaigtų antrinių gamybų" -#: build/serializers.py:819 +#: build/serializers.py:827 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:830 msgid "Build order has incomplete outputs" msgstr "Gamybos užsakymas turi nebaigtų rezultatų" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Gamybos eilutė" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Gamybos rezultatas" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Gamybos eilutės įrašas" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Prekė turi būti atsargose" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Turi būti pateikti paskirstymo elementai" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "Neįtraukti vietos" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Neįtraukti atsargų iš šios pasirinktos vietos" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Keičiamos atsargos" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Pakaitinės atsargos" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Leisti priskirti pakaitines detales" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Pasirenkami elementai" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Priskirti papildomus BOM elementus gamybos užsakymui" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "BOM nuoroda" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "BOM detalės ID" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "BOM detalės pavadinimas" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Priskirtas kiekis" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Gamybos nuoroda" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Detalės kategorijos pavadinimas" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sekama" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "BOM elementas" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Prieinamos atsargos" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Prieinamos pakaitinės atsargos" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Prieinamos variantų atsargos" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "Yra nuoroda" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Yra failas" -#: common/api.py:790 +#: 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:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Vartotojas neturi teisės ištrinti šio priedo" @@ -1550,7 +1550,7 @@ 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ė" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Vartotojas" msgid "Price break quantity" msgstr "Kiekio ribinis taškas kainai" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Kaina" @@ -1652,7 +1652,7 @@ msgstr "Šio webhook'o pavadinimas" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktyvus" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų" msgid "Checkbox parameters cannot have choices" msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Pasirinkimai turi būti unikalūs" @@ -2094,7 +2094,7 @@ msgstr "Žymimasis laukelis" msgid "Is this parameter a checkbox?" msgstr "Ar šis parametras yra žymimasis laukelis?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Pasirinkimai" @@ -2106,7 +2106,7 @@ msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)" msgid "Selection list for this parameter" msgstr "Pasirinkimų sąrašas šiam parametrui" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Įjungta" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablonas" @@ -2148,7 +2148,7 @@ msgstr "Šablonas" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" @@ -2156,18 +2156,18 @@ msgstr "Data" msgid "Parameter Value" msgstr "Parametro reikšmė" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Neprivalomas pastabų laukas" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Detalės pagal nutylėjimą yra šablonai" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Gauti klaidų ataskaitas" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Gauti pranešimus apie sistemos klaidas" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Paskutiniai naudoti spausdintuvai" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Išsaugoti paskutinius naudotojo naudotus spausdintuvus" @@ -3988,33 +3996,33 @@ msgstr "Detalė yra aktyvi" msgid "Manufacturer is Active" msgstr "Gamintojas yra aktyvus" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Tiekėjo detalė yra aktyvi" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Vidinė detalė yra aktyvi" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Turi atsargų" @@ -4195,7 +4203,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ė" @@ -4213,12 +4221,12 @@ msgstr "Pasirinkite detalę" msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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)" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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)" @@ -4282,16 +4290,16 @@ msgstr "Išorinės nuorodos į tiekėjo detalės URL" msgid "Supplier part description" msgstr "Tiekėjo detalės aprašymas" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "bazinė kaina" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Pakuotės kiekis" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Bendras kiekis vienoje pakuotėje. Palikite tuščią, jei prekė tiekiama po vieną." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "daugiklis" @@ -4339,14 +4347,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" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Užsakymas" msgid "Order Complete" msgstr "Užsakymas įvykdytas" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Vidinė detalė" @@ -4918,7 +4930,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:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Užsakymo nuoroda" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Būsena" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Gauta" msgid "Number of items received" msgstr "Gautų prekių kiekis" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Patikrino" msgid "User who checked this shipment" msgstr "Vartotojas, patikrinęs šią siuntą" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Priskiriamas kiekis negali viršyti atsargų kiekio" msgid "Allocation quantity must be greater than zero" msgstr "Priskirtas kiekis turi būti didesnis nei nulis" -#: order/models.py:2602 order/serializers.py:1568 +#: 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į" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tiekėjo pavadinimas" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Užsakymo atšaukti negalima" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: 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:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Užsakymas nėra atidarytas" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatinis kainų nustatymas" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Pirkimo kainos valiuta" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Sujungti elementus" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Vidinis detalės pavadinimas" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Turi būti nurodyta tiekėjo detalė" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Turi būti nurodytas pirkimo užsakymas" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Tiekėjas turi atitikti pirkimo užsakymą" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Pirkimo užsakymas turi atitikti tiekėją" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Eilutės įrašas" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Įveskite partijos kodą gaunamoms atsargoms" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Įveskite galiojimo datą gaunamoms atsargoms" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Įveskite gaunamų atsargų serijos numerius" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Pakeisti gaunamų atsargų pakavimo informaciją" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Papildoma pastaba gaunamoms atsargoms" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Brūkšninis kodas" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Nuskaitytas brūkšninis kodas" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Brūkšninis kodas jau naudojamas" -#: order/serializers.py:962 order/serializers.py:2056 +#: 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:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Turi būti nurodyta paskirties vieta" -#: order/serializers.py:988 +#: 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:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Siuntos" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Užbaigtos siuntos" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Pardavimo kainos valiuta" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Paskirstyti elementai" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nepateikta siuntos informacija" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Kiekis turi būti teigiamas" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Įveskite priskiriamus serijos numerius" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Siunta jau išsiųsta" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Nerasta atitikmenų šiems serijos numeriams" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Šie serijos numeriai nepasiekiami" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Eilutės įrašas jau gautas" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Grąžinamas kiekis" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Eilutės kainos valiuta" @@ -5732,71 +5744,71 @@ msgstr "Neįtraukti sub-kategorijų po nurodyta kategorija" msgid "Has Results" msgstr "Turi rezultatų" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Yra variantas" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Yra versija" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Turi versijų" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "BOM galiojantis" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Surinkimo detalė gali būti testuojama" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Komponento detalė gali būti testuojama" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Naudoja" @@ -5805,7 +5817,7 @@ msgstr "Naudoja" msgid "Part Category" msgstr "Detalių kategorija" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Detalių kategorijos" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Detalės" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Sukūręs vartotojas" msgid "Owner responsible for this part" msgstr "Atsakingas vartotojas už šią detalę" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Parduodamas kiekis" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Valiuta, naudojama kainų skaičiavimams kaupti" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimali BOM kaina" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Minimali komponentų detalių kaina" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maksimali BOM kaina" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Maksimali komponentų detalių kaina" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimali pirkimo kaina" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Mažiausia istorinė pirkimo kaina" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maksimali pirkimo kaina" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Didžiausia istorinė pirkimo kaina" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimali vidinė kaina" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Mažiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maksimali vidinė kaina" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Didžiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Mažiausia tiekėjo kaina" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Mažiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Didžiausia tiekėjo kaina" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Didžiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Mažiausia varianto kaina" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Apskaičiuota minimali variantų detalių kaina" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Didžiausia varianto kaina" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Apskaičiuota didžiausia variantų detalių kaina" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimali kaina" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Nepaisyti minimalios kainos" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maksimali kaina" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Nepaisyti maksimalios kainos" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Apskaičiuota bendra minimali kaina" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Apskaičiuota bendra maksimali kaina" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Minimali pardavimo kaina" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Mažiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Didžiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Mažiausia pardavimo kaina" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Mažiausia istorinė pardavimo kaina" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Didžiausia istorinė pardavimo kaina" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Detalė inventorizacijai" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Vienetų skaičius" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Atsargų įrašų skaičius inventorizacijos metu" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Bendras prieinamas atsargų kiekis inventorizacijos metu" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Inventorizacijos atlikimo data" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Minimali atsargų kaina" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Apytikslė minimali turimų atsargų kaina" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maksimali atsargų kaina" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Apytikslė maksimali turimų atsargų kaina" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Detalės kainų intervalai pardavimui" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Detalės bandymų šablonas" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Netinkamas šablono pavadinimas - turi būti bent vienas raidinis ar skaitinis simbolis" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Bandymų šablonus galima kurti tik testuojamoms detalėms" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Detalė jau turi bandymų šabloną su tokiu pačiu raktu" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Bandymo pavadinimas" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Įveskite bandymo pavadinimą" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Bandymo raktas" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Supaprastintas bandymo raktas" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Bandymo aprašymas" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Įveskite šio bandymo aprašymą" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Ar šis bandymas įjungtas?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Privalomas" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Ar šį bandymą būtina išlaikyti?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Reikalauja reikšmės" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Ar šiam bandymui reikia įvesti reikšmę pridedant rezultatą?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Reikalauja priedo" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ar šiam bandymui reikia pridėti failą su rezultatu?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Galimi pasirinkimai šiam bandymui (atskirti kableliais)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM elemento keisti negalima - surinkimas užrakintas" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM elemento keisti negalima - varianto surinkimas užrakintas" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Pasirinkite pirminę detalę" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Pavaldi detalė" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Pasirinkite detalę, naudojamą BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "BOM reikalingas šios detalės kiekis" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Šis BOM elementas yra pasirenkamas" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Šis BOM elementas yra sunaudojamas (nesekamas gamybos užsakymuose)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "BOM nuoroda" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "BOM pastabos" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Kontrolinė suma" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "BOM eilutės kontrolinė suma" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Patvirtinta" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Šis BOM elementas patvirtintas" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Paveldima" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Šį BOM elementą paveldi variantų sąrašai" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Šiam BOM elementui galima naudoti variantinių detalių atsargas" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Sekamoms detalėms kiekis turi būti sveikasis skaičius" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Turi būti nurodyta pavaldi detalė" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "BOM elemento pakaitalas" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Pakaitinė detalė negali būti tokia pati kaip pagrindinė detalė" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Pagrindinis BOM elementas" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Pakaitinė detalė" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Detalė 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Detalė 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Pasirinkite susijusią detalę" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Pastaba šiam ryšiui" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Detalių ryšio negalima sukurti tarp detalės ir jos pačios" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "Pakuotės įskiepis" msgid "Plugin" msgstr "Įskiepis" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Autorius nerastas" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "Numatytoji piktograma visoms vietoms, kurioms nepaskirta piktograma (nep msgid "Stock Location" msgstr "Atsargų vieta" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Atsargų vietos" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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" @@ -8901,222 +8913,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" @@ -9582,115 +9594,119 @@ msgstr "Pagrindinė grupė" msgid "Primary group for the user" msgstr "Pagrindinė vartotojo grupė" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Administratorius" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Pirkimo užsakymai" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Pardavimo užsakymai" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Supervartotojas" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ar šis vartotojas yra supervartotojas" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ar ši vartotojo paskyra yra aktyvi" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Tik supervartotojas gali keisti šį lauką" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Neturite leidimo kurti vartotojų" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Jūsų paskyra sukurta." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Prisijungimui naudokite slaptažodžio atstatymo funkciją" -#: users/serializers.py:490 +#: 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 73107e725c..8a81f92378 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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 "" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 e50f14380d..8ae4cbb31d 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\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" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -165,19 +165,19 @@ msgstr "Gegevens bevatten verboden markdown inhoud" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "Ongeldige URL: geen hostnaam" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "Ongeldige URL: hostnaam kon niet worden opgelost" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL-punten naar een privé of gereserveerd IP-adres" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "Te veel doorverwijzingen" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -665,89 +665,89 @@ msgstr "Max. datum" msgid "Exclude Tree" msgstr "Boomstructuur uitsluiten" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Optioneel" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testbaar" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Verbruikt" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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 +#: build/api.py:685 msgid "Build not found" -msgstr "" +msgstr "Build niet gevonden" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Uitvoer" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filter op uitvoer standaard item ID. Gebruik 'null' om niet geïnstalleerde build items te vinden." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Productieorders" @@ -783,9 +783,9 @@ msgstr "Doeldatum moet na startdatum zijn" msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Bronlocatie" @@ -861,16 +861,16 @@ msgstr "Productiestatus" msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Uitgegeven door" msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Verantwoordelijke" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Externe Link" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link naar externe URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Bouw prioriteit" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Project code" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Kan de bouwopdracht niet voltooien zolang onderliggende bouwopdrachten nog openstaan" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Kan de bouwopdracht niet voltooien zolang de output onvolledig is" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Verwijderen van taak om toewijzingen te voltooien mislukt" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build output {serial} heeft niet alle vereiste tests doorstaan" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "Voorraadproducten zijn nog in productie" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Kan een build uitvoer niet gedeeltelijk voltooien met de toegewezen items" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Bouw order regel item" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Bouw object" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Hoeveelheid" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Aantal van verbruikte voorraad" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Productieartikel moet een productieuitvoer specificeren, omdat het hoofdonderdeel gemarkeerd is als traceerbaar" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "Toegewezen hoeveelheid moet groter zijn dan nul" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet overschrijden" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Installeren in" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Bouw level" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Onderdeel naam" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Voorraad locatie voor project uitvoer" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Toegewezen voorraad gebruiken" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "Bouw opdracht heeft open sub bouw orders" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "Bouwen moet in de productiestatus staan" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:991 +#: build/serializers.py:999 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:1007 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:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "Alle artikelen" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "Niet Gevolgde items" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "Gevolgde Items" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "Item Type" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "Selecteer item type om automatisch toe te wijzen" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "BOM referentie" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "BOM onderdeel ID" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "BOM onderdeel naam" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "Instaleeren Op" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Toegewezen hoeveelheid" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Bouw referentie" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Naam categorie onderdeel" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Volgbaar" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Beschikbare vervanging voorraad" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Beschikbare varianten voorraad" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbruikte hoeveelheid overschrijdt toegewezen hoeveelheid" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "Optionele notities voor voorraadverbruik" -#: build/serializers.py:1783 +#: build/serializers.py:1807 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:1812 msgid "Duplicate build item allocation" msgstr "Dupliceer build item allocatie" -#: build/serializers.py:1806 +#: build/serializers.py:1830 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:1835 msgid "Duplicate build line allocation" msgstr "Dupliceer build line toewijzing" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Ten minste één item of regel moet worden opgegeven" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "Achterstallige Productieorder" msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Is koppeling" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Is een bestand" -#: common/api.py:790 +#: 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:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen." @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Gebruiker" msgid "Price break quantity" msgstr "Prijs pauze hoeveelheid" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Prijs" @@ -1652,7 +1652,7 @@ msgstr "Naam van deze webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actief" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Checkbox parameters kunnen geen eenheden bevatten" msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Keuzes moeten uniek zijn" @@ -2094,7 +2094,7 @@ msgstr "Selectievakje" msgid "Is this parameter a checkbox?" msgstr "Is deze parameter een selectievak?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Keuzes" @@ -2106,7 +2106,7 @@ msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" msgid "Selection list for this parameter" msgstr "Lijst met selecties voor deze parameter" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Ingeschakeld" @@ -2126,7 +2126,7 @@ msgstr "Parameters" msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2752 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" @@ -2140,7 +2140,7 @@ msgstr "ID van het doelmodel voor deze parameter" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Sjabloon" @@ -2148,7 +2148,7 @@ msgstr "Sjabloon" msgid "Parameter template" msgstr "Parameter sjabloon" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Gegevens" @@ -2156,18 +2156,18 @@ msgstr "Gegevens" msgid "Parameter Value" msgstr "Parameterwaarde" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Optioneel notities veld" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2547,19 +2547,19 @@ msgstr "Toon de `over` modal alleen aan superusers" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "Toon superuser banner" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "Toon een waarschuwings-banner in de UI wanneer ingelogd als superuser" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "Toon admin banner" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +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" @@ -2859,8 +2859,8 @@ msgstr "Onderdelen zijn standaard sjablonen" msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/setting/system.py:489 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" @@ -3034,7 +3034,7 @@ msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijs #: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "BOM Zero Quantity toestaan" #: 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" @@ -3601,7 +3601,7 @@ msgstr "Voorraadgegevens zal worden verwijderd na het opgegeven aantal dagen" #: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "Oude voorraadgegevens verwijderen" #: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Uitgeschakeld: Het volledige categorie pad wordt weergegeven als hover tooltip. Ingeschakeld: Het pad van de volledige categorie wordt weergegeven als platte tekst." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Foutrapportages ontvangen" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Meldingen ontvangen van systeemfouten" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Laatst gebruikte printer" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Sla de laatst gebruikte printer op voor een gebruiker" @@ -3988,33 +3996,33 @@ msgstr "Onderdeel is actief" msgid "Manufacturer is Active" msgstr "Fabrikant is actief" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Leveranciersonderdelen is actief" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Primaire leverancierdeel" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Intern onderdeel is actief" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Leverancier is actief" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Heeft voorraad" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Onderdeel selecteren" msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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)" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL voor link externe leveranciers onderdeel" msgid "Supplier part description" msgstr "Omschrijving leveranciersdeel" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "basisprijs" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Pakket hoeveelheid" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totale hoeveelheid geleverd in één pakket. Laat leeg voor enkele afzonderlijke items." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "meerdere" @@ -4339,14 +4347,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" @@ -4451,67 +4463,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" @@ -4821,7 +4833,7 @@ msgstr "Bestellen" msgid "Order Complete" msgstr "Bestelling voltooid" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern onderdeel" @@ -4918,7 +4930,7 @@ msgstr "Start datum" msgid "Scheduled start date for this order" msgstr "Geplande startdatum voor deze bestelling" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Orderreferentie" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Ontvangen" msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Gecontroleerd door" msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,217 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leveranciers Naam" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Bestelling heeft onvolledige regelitems" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatisch prijzen" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Items samenvoegen" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interne naam onderdeel" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Voer batch code in voor inkomende voorraad items" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Voer vervaldatum in voor inkomende voorraad items" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad" -#: order/serializers.py:855 order/serializers.py:2037 +#: 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:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Streepjescode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Gescande streepjescode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Verzendingen" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Toegewezen lijnen" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Toegewezen items" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "De volgende serienummers zijn niet beschikbaar" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Retourneer regel item" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Regel item is al ontvangen" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Hoeveelheid te retourneren" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Lijn prijs valuta" @@ -5733,71 +5745,71 @@ msgstr "Subcategorieën uitsluiten in de opgegeven categorie" msgid "Has Results" msgstr "Heeft resultaten" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Is een variant" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Is revisie" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Heeft revisies" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "BOM Valid" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Cascade Categorieën" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Indien waar, inclusief items op de onderliggende categorieën van de opgegeven categorie" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filter op numerieke categorie-ID of de letterlijke 'null'" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "Bouw onderdeel is actief" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "Bouw onderdeel is te volgen" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Assemblage deel is testbaar" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "Onderdeel is actief" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "Onderdeel is trackable" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Component onderdeel is testbaar" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "Onderdeel is nog te bouwen" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "Onderdeel is virtueel" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "Heeft beschikbare voorraad" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Gebruik" @@ -5806,7 +5818,7 @@ msgstr "Gebruik" msgid "Part Category" msgstr "Onderdeel Categorie" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Onderdeel Categorieën" @@ -5838,7 +5850,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)" @@ -5859,7 +5871,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:29 msgid "Parts" msgstr "Onderdelen" @@ -5974,7 +5986,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" @@ -6007,7 +6019,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" @@ -6087,756 +6099,756 @@ msgstr "Aanmaken gebruiker" msgid "Owner responsible for this part" msgstr "Eigenaar verantwoordelijk voor dit deel" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Verkopen van meerdere" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Valuta die gebruikt wordt voor de cache berekeningen" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimale BOM kosten" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Minimale kosten van onderdelen" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maximale BOM kosten" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Maximale kosten van onderdelen" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimale aankoop kosten" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Minimale historische aankoop kosten" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maximale aanschaf kosten" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Maximum historische aankoop kosten" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimale interne prijs" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Minimale kosten op basis van interne prijsschommelingen" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maximale interne prijs" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Maximale kosten gebaseerd op interne prijsvoordelen" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Minimale leverancier prijs" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Minimale prijs van onderdeel van externe leveranciers" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Maximale leverancier prijs" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Maximale prijs van onderdeel van externe leveranciers" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Minimale variant kosten" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Berekende minimale kosten van variant onderdelen" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Maximale variant kosten" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Berekende maximale kosten van variant onderdelen" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimale kostprijs" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Overschrijf minimale kosten" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maximale kosten" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Overschrijf maximale kosten" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Berekende minimale kosten" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Berekende totale maximale kosten" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Minimale verkoop prijs" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Minimale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Maximale verkoop prijs" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Maximale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Minimale verkoop prijs" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Minimale historische verkoop prijs" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Maximale verkoop prijs" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Maximale historische verkoop prijs" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Getelde items" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Aantal individuele voorraadvermeldingen op het moment van voorraadcontrole" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Totale voorraad op het moment van voorraadcontrole" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Datum waarop voorraad werd uitgevoerd" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Minimale voorraadprijs" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Geschatte minimum kosten van de voorraad op de hand" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maximale voorraadkosten" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Geschatte maximale kosten van de hand van voorraad" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Periodieke verkoopprijs voor onderdelen" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Sjabloon test onderdeel" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ongeldige sjabloonnaam - moet minstens één alfanumeriek teken bevatten" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Test sjablonen kunnen alleen worden gemaakt voor testbare onderdelen" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Test template met dezelfde sleutel bestaat al voor een deel" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Test naam" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Geef een naam op voor de test" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Test sleutel" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Vereenvoudigde sleutel voor de test" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Test beschrijving" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Voer beschrijving in voor deze test" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Is deze test ingeschakeld?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Vereist" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Is deze test nodig om te doorlopen?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Waarde vereist" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Heeft deze test een waarde nodig bij het toevoegen van een testresultaat?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Vereist bijlage" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vereist deze test een bestandsbijlage bij het toevoegen van een testresultaat?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld " -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Selecteer boven liggend onderdeel" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Sub onderdeel" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Selecteer onderdeel dat moet worden gebruikt in BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "BOM hoeveelheid voor dit BOM item" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Dit BOM item is optioneel" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Dit BOM item is verbruikbaar (het wordt niet bijgehouden in build orders)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Totale hoeveelheid" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Extra benodigde hoeveelheid voor een build, rekening houdend met verliezen van de setup" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Attriatie" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Geschatte uitstraling voor een gebouw, uitgedrukt in percentage (0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Afronden meerdere" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Afronden met omhoog vereiste productiehoeveelheid naar dichtstbijzijnde meerdere van deze waarde" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Artikelregel referentie" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "BOM item notities" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Controle som" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "BOM lijn controle som" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Goedgekeurd" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Dit BOM item is goedgekeurd" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Wordt overgenomen" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Dit BOM item wordt overgenomen door BOMs voor variant onderdelen" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Voorraaditems voor variant onderdelen kunnen worden gebruikt voor dit BOM artikel" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Hoeveelheid moet een geheel getal zijn voor trackable onderdelen" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "BOM Item vervangingen bewerken" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Vervanging onderdeel kan niet hetzelfde zijn als het hoofddeel" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Bovenliggend BOM item" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Vervanging onderdeel" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Eerste deel" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Tweede deel" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Selecteer gerelateerd onderdeel" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Opmerking voor deze relatie" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Onderdeel relatie kan niet worden gecreëerd tussen een deel en zichzelf" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7759,7 +7771,7 @@ msgstr "Pakket plug-in" msgid "Plugin" msgstr "Plug-in" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Geen auteur gevonden" @@ -8289,7 +8301,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" @@ -8362,7 +8374,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" @@ -8446,7 +8458,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" @@ -8531,7 +8543,7 @@ msgstr "Standaardpictogram voor alle locaties waarvoor geen pictogram is ingeste msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Voorraadlocaties" @@ -8580,7 +8592,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" @@ -8625,7 +8637,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" @@ -8641,7 +8653,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" @@ -8754,7 +8766,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" @@ -8878,7 +8890,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" @@ -8902,222 +8914,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" @@ -9583,115 +9595,119 @@ msgstr "Primaire groep" msgid "Primary group for the user" msgstr "Primaire groep van de gebruiker" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Administrator" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Inkooporders" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Verkooporders" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Administrator " -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Is deze gebruiker een administrator " -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Is dit gebruikersaccount actief" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Enkel een supergebruiker kan dit veld aanpassen" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Wachtwoord" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Wachtwoord voor de gebruiker" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Overschrijf waarschuwing" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Overschrijf de waarschuwing over wachtwoord regels" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: 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:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Je account is aangemaakt." -#: users/serializers.py:484 +#: 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:490 +#: 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 d4101780da..0985597cb6 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Spores" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Produksjonsordrer" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Kildeplassering" @@ -861,16 +861,16 @@ msgstr "Produksjonsstatus" msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Utstedt av" msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Ansvarlig" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Lenke til ekstern URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Produksjonsprioritet" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Prosjektkode" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Kunne ikke delegere bort oppgaven for å fullføre tildelinger" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Produksjonsordre {build} er fullført" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienumre må angis for sporbare deler" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Produksjonsartikkel {serial} har ikke bestått alle påkrevde tester" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Produksjonsartikkel" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Produksjonsobjekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Antall" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Produksjonselement må spesifisere en produksjonsartikkel, da master-del er merket som sporbar" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelig lagerbeholdning ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Monteres i" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Lagervare for montering" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Delnavn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Lagerplassering for produksjonsartikkel" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Bruk tildelt lagerbeholdning" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:991 +#: build/serializers.py:999 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:1007 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:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "BOM-referanse" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tildelt antall" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Produksjonsreferanse" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Delkategorinavn" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Sporbar" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Tilgjengelige erstatningsvarer" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Tilgjengelige variantvarer" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "Forfalt produksjonsordre" msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Er lenke" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Er fil" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Bruker" msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1652,7 +1652,7 @@ msgstr "Navn for webhooken" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Sjekkboksparameter kan ikke ha enheter" msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Valg må være unike" @@ -2094,7 +2094,7 @@ msgstr "Sjekkboks" msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Valg" @@ -2106,7 +2106,7 @@ msgstr "Gyldige valg for denne parameteren (kommaseparert)" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Aktivert" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mal" @@ -2148,7 +2148,7 @@ msgstr "Mal" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "Parameterverdi" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Valgfritt notatfelt" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "Deler er maler som standard" msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/setting/system.py:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Motta feilrapporter" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Motta varsler om systemfeil" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "Delen er aktiv" msgid "Manufacturer is Active" msgstr "Leverandør er aktiv" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Leverandørdel er aktiv" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Intern del er aktiv" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Leverandør er aktiv" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Velg del" msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL for ekstern leverandørdel-lenke" msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Pakkeantall" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totalt antall i en enkelt pakke. La være tom for enkeltenheter." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "flere" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Ordre" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern del" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Ordrereferanse" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Mottatt" msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Sjekket Av" msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leverandørnavn" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta for linje" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Delkategori" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Delkategorier" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Deler" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Opprettingsbruker" msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Antall" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Dato" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Krever denne testen en verdi når det legges til et testresultat?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Krever denne testen et filvedlegg når du legger inn et testresultat?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Denne BOM-artikkelen er forbruksvare (den spores ikke i produksjonsordrer)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Lagervarer for variantdeler kan brukes for denne BOM-artikkelen" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Del-forhold kan ikke opprettes mellom en del og seg selv" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "Utvidelse" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Ingen forfatter funnet" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "Standard ikom for alle plasseringer som ikke har satt et ikon (valgfritt msgid "Stock Location" msgstr "Lagerplassering" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Lagerplasseringer" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Administrator" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Innkjøpsordrer" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Salgsordre" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superbruker" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Er denne brukeren en superbruker" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Er denne brukerkontoen aktiv" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Din konto er opprettet." -#: users/serializers.py:484 +#: 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:490 +#: 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 73485a7b24..e582fe8544 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -665,89 +665,89 @@ msgstr "Maksymalna data" msgid "Exclude Tree" msgstr "Wyklucz drzewo" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Śledzony" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testowalne" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Wyjście" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Zlecenia budowy" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Lokalizacja źródła" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Wydany przez" msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Odpowiedzialny" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Priorytet budowy" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Kod projektu" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Nie udało się wyładować zadania, aby ukończyć alokację budowli" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Należy podać numery seryjne dla lokalizowania części" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Wyjście budowy {serial} nie przeszło wszystkich testów" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Zbuduj obiekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Ilość" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Element kompilacji musi określać dane wyjściowe kompilacji, ponieważ część główna jest oznaczona jako możliwa do śledzenia" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Przydzielona ilość ({q}) nie może przekraczać dostępnej ilości zapasów magazynowych ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Poziom budowania" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Nazwa komponentu" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Zaakceptuj nieprzydzielone" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Magazyn wymienny" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Przydziel opcjonalne elementy BOM do zbudowania zamówienia" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Odniesienie BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID części BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Nazwa części BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Ilość zarezerwowana" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Możliwość śledzenia" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Dostępny magazyn zastępczy" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Jest plikiem" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "Brak wtyczki" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Użytkownik" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktywny" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Aktywne" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Szablon" @@ -2148,7 +2148,7 @@ msgstr "Szablon" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dane" @@ -2156,18 +2156,18 @@ msgstr "Dane" msgid "Parameter Value" msgstr "Wartość parametru" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "Komponent jest aktywny" msgid "Manufacturer is Active" msgstr "Producent jest aktywny" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Wybierz część" msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Ilość w opakowaniu" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "wielokrotność" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Zamówienie" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Komponent wewnętrzny" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Odniesienie zamówienia" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Odebrane" msgid "Number of items received" msgstr "" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Sprawdzone przez" msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Kategoria komponentu" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Kategorie części" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Części" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Tworzenie użytkownika" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Wymagane" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "Wtyczka" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Nie znaleziono autora" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Lokacje stanu magazynowego" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "Zlecenia zakupu" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "Zlecenia zakupu" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: 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:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Twoje konto zostało utworzone." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Zresetuj hasło" -#: users/serializers.py:490 +#: 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 b32ef565ca..4cd778ed0e 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Monitorado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Ordens de Produções" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Local de Origem" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "Usuário que emitiu este pedido de produção" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Responsável" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Usuário ou grupo responsável para este pedido de produção" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Link Externo" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Prioridade de Produção" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código do projeto" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Código do projeto para este pedido de produção" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Falha ao descarregar tarefa para concluir alocações de construção" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "O Pedido de produção {build} foi concluído!" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Saída de produção já completada" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "O item de produção {serial} não passou todos os testes necessários" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Item da linha de Produção" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Objeto de produção" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Quantidade" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Item estoque selecionado não coincide com linha da LDM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Destino do Item do Estoque" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 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:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Entre a quantidade da saída de produção" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Local de estoque para a produção" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas recicladas" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Motivo para sucatear saída(s) de produção" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar este pedido de produção" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Estoque sobrealocado" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrealocados" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 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:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Linha de produção" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Item deve estar em estoque" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Local não incluso" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Não incluir itens de estoque deste local" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Estoque permutável" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Substituir Estoque" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "É uma Ligação" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: 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" @@ -1550,7 +1550,7 @@ 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 "" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preço" @@ -1652,7 +1652,7 @@ msgstr "Nome para este webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "Parâmetros da caixa de seleção não podem ter unidades" msgid "Checkbox parameters cannot have choices" msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Escolhas devem ser únicas" @@ -2094,7 +2094,7 @@ msgstr "Caixa de seleção" msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Escolhas" @@ -2106,7 +2106,7 @@ msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modelo" @@ -2148,7 +2148,7 @@ msgstr "Modelo" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dados" @@ -2156,18 +2156,18 @@ msgstr "Dados" msgid "Parameter Value" msgstr "Valor do Parâmetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "Peças são modelos por padrão" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Receber relatório de erros" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Receber notificações para erros do sistema" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Últimas máquinas de impressão utilizadas" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Salvar as últimas máquinas de impressão usadas para um usuário" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "preço base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Quantidade de embalagens" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens únicos." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiplo" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Pedido" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Peça Interna" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Referência do pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Situação" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Recebido" msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Verificado por" msgid "User who checked this shipment" msgstr "Usuário que verificou esta remessa" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Nome do Fornecedor" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: 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:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Moeda de preço de compra" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Itens de linha" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: 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:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras já em uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Envios concluídos" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Moeda de preço de venda" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Digite números de série para alocar" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "O pedido já foi enviado" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Devolver item do pedido" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Item do pedido já foi recebido" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Tipo de moeda para o item do pedido" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Categoria da Peça" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Categorias de Peça" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Peças" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Criação de Usuário" msgid "Owner responsible for this part" msgstr "Proprietário responsável por esta peça" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Venda múltipla" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Moeda usada para armazenar os cálculos de preços" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Custo Mínimo da LDM" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Custo mínimo das peças componentes" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Custo Máximo da LDM" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Custo máximo das peças componentes" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Custo Mínimo de Compra" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Custo mínimo histórico de compra" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Custo Máximo de Compra" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Custo máximo histórico de compra" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Preço Interno Mínimo" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Custo mínimo baseado nos intervalos de preço internos" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Preço Interno Máximo" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Custo máximo baseado nos intervalos de preço internos" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Preço Mínimo do Fornecedor" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Preço Máximo do Fornecedor" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Custo Mínimo variável" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Custo mínimo calculado das peças variáveis" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Custo Máximo Variável" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Custo máximo calculado das peças variáveis" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Custo Mínimo" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Sobrepor o custo mínimo" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Custo Máximo" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Sobrepor o custo máximo" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Custo total mínimo calculado" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Custo total máximo calculado" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Preço Mínimo de Venda" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Preço mínimo de venda baseado nos intervalos de preço" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Preço Máximo de Venda" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Preço máximo de venda baseado nos intervalos de preço" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Custo Mínimo de Venda" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Preço histórico mínimo de venda" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Custo Máximo de Venda" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Preço histórico máximo de venda" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Peça para Balanço" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Total de Itens" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Número de entradas de estoques individuais no momento do balanço" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Estoque total disponível no momento do balanço" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Data de realização do balanço" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Custo Mínimo de Estoque" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Custo mínimo estimado de estoque disponível" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Custo Máximo de Estoque" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Custo máximo estimado de estoque disponível" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Nome de Teste" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Insira um nome para o teste" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Descrição do Teste" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Digite a descrição para este teste" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Requerido" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Este teste é obrigatório passar?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Requer Valor" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Este teste requer um valor ao adicionar um resultado de teste?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Anexo obrigatório" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Este teste requer um anexo ao adicionar um resultado de teste?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Selecione a Peça Parental" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Selecionar peça a ser usada na LDM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Quantidade de LDM para este item LDM" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Este item LDM é opcional" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este item LDM é consumível (não é rastreado nos pedidos de construção)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Referência do Item LDM" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Notas do Item LDM" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Soma de verificação" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Soma de Verificação da LDM da linha" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Validado" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "O item da LDM foi validado" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Obtém herdados" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este item da LDM é herdado por LDMs para peças variáveis" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Itens de estoque para as peças das variantes podem ser usados para este item LDM" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Sub peça deve ser especificada" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Substituir Item da LDM" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "A peça de substituição não pode ser a mesma que a peça mestre" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Item LDM Parental" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Substituir peça" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Selecionar Peça Relacionada" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacionamento da peça não pode ser criada com ela mesma" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "Extensões" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Nenhum autor encontrado" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "Ícone padrão para todos os locais que não tem um ícone (opcional)" msgid "Stock Location" msgstr "Localização do estoque" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Locais de estoque" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Administrador" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Pedidos de compra" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Pedidos de vendas" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:484 +#: 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:490 +#: 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 302ee4688c..5b474c1454 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -665,89 +665,89 @@ msgstr "Data máxima" msgid "Exclude Tree" msgstr "Excluir árvore" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Consumível" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opcional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testável" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Saída" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Ordens de Produções" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Local de Origem" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "Usuário que emitiu esta ordem de produção" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Responsável" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Usuário ou grupo responsável para esta ordem de produção" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Link Externo" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Prioridade de Produção" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Código do Projeto" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Código do projeto para esta ordem de compilação" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Não é possível concluir o pedido de produção com pedidos secundários abertos" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Não é possível concluir o pedido com saídas incompletas" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Falha ao descarregar tarefa para concluir alocações de compilação" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "O Pedido de produção {build} foi concluído" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Saída da produção já está concluída" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A saída da produção {serial} não passou em todos os testes necessários" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Item da ordem de produção" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Compilar objeto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Quantidade" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "O item de estoque selecionado não coincide com linha da BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Destino do Item do Estoque" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Nível de produção" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 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:249 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:268 build/serializers.py:317 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:339 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Local de estoque para saídas de produção" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas eliminadas" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Motivo para eliminar saída(s) de produção" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar esta ordem de produção" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrecarregados" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 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:824 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:827 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:830 msgid "Build order has incomplete outputs" msgstr "Ordem de produção tem saídas incompletas" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Linha de Produção" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "O item deve estar em estoque" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Excluir Local" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Excluir itens de estoque desta localização selecionada" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Estoque Intercambiável" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Estoque Substituto" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Referência do BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID da parte BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Nome da peça BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Referência da produção" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Nome da Categoria" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Item BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Estoque Substituto Disponível" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Estoque de Variantes Disponível" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "É um link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:790 +#: 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:803 +#: 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" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Usuário" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preço" @@ -1652,7 +1652,7 @@ msgstr "Nome para este webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Caixa de seleção" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Habilitado" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Modelo" @@ -2148,7 +2148,7 @@ msgstr "Modelo" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dados" @@ -2156,18 +2156,18 @@ msgstr "Dados" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Peças são modelos por padrão" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Desativado: O caminho completo da categoria é exibido como uma dica do mouse. Habilitado: O caminho completo da categoria é exibido como texto sem formatação." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Receber relatório de erros" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Receber notificações para erros do sistema" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Últimas máquinas de impressão utilizadas" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Salvar as últimas máquinas de impressão usadas para um usuário" @@ -3988,33 +3996,33 @@ msgstr "A peça está ativa" msgid "Manufacturer is Active" msgstr "Fabricante está ativo" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "A peça do Fornecedor está ativa" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "A peça interna está ativa" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "O fornecedor está Ativo" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Tem estoque" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "preço base" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Quantidade de embalagens" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens individuais." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "múltiplo" @@ -4339,14 +4347,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" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Pedido" msgid "Order Complete" msgstr "Pedido Completo" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Peça Interna" @@ -4918,7 +4930,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:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Referência do pedido" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Situação" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Recebido" msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Verificado por" msgid "User who checked this shipment" msgstr "Usuário que verificou este envio" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "O pedido não pode ser cancelado" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Mesclar Itens" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Nome Interno da Peça" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Código de barras já está em uso" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Itens Alocados" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: 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:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Categoria da Peça" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Categorias de Peça" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Peças" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Criação de Usuário" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Modelos de teste só podem ser criados para partes testáveis" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Obrigatório" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Admin" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superusuário" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Somente um superusuário pode ajustar este campo" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Senha" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Senha do usuário" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: 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:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 1b2875155d..125a9f46aa 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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ă" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -665,89 +665,89 @@ msgstr "Dată maximă" msgid "Exclude Tree" msgstr "Exclude arbore" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opţional" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Urmarit" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testabilă" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Alocate" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Consumat" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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ă" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Ieșire" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrează după ID-ul elementelor de ieșire din stoc. Utilizați \"null\" pentru a găsi elemente de construcție dezinstalate." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Comenzi de Producție" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Locație sursă" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Emis de" msgid "User who issued this build order" msgstr "Utilizatorul care a emis această comandă de producție" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Responsabil" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Link extern" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link către URL-ul extern" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Prioritate de construire" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Cod proiect" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Cod de proiect pentru această comandă de construcție" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Nu se poate finaliza construcția comenzii cu versiuni deschise" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Nu se poate completa comanda de producție cu rezultate incomplete" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Nu s-a putut descărca sarcina pentru a finaliza alocarea construcției" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "A fost finalizată o comandă de producție {build}" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nu este specificată nicio ieșire de producție" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Construcția este deja finalizată" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Construcția {serial} nu a trecut toate testele necesare" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "Stocurile alocate sunt încă în producţie" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Nu se poate finaliza parțial o construcție cu elemente alocate" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Element linie comandă de producție" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ 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" msgstr "Cantitate" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Cantitatea necesară pentru comanda de producție" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Cantitatea de stoc consumată" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Articolul contruit trebuie să specifice o ieșire de construcție, deoarece piesa principală este marcată ca urmăribilă." -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Articolul din stoc selectat nu se potrivește cu linia BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "Cantitatea alocată trebuie să fie mai mare decât zero" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Cantitatea trebuie sa fie 1 pentru stoc serializat" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantitate alocata ({q}) nu trebuie sa depaseasca cantitatea disponibila de stoc ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Locație articol stoc" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Cantitatea de stoc alocată pentru construcție" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Instalează în" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Destinație articol in stoc" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Nivel de construcție" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Numele Piesei" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Rezultat de construcție" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 msgid "This build output has already been completed" msgstr "Această producție este deja finalizată" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Introduceți cantitatea pentru producția de ieșire" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "Nu este permisă" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Acceptați nealocat" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Acceptați Incomplet" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Linie de construcție" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Rezultatul construirii" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Nume piesă BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Nume Categorie Piesă" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Stoc disponibil" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Stoc de înlocuire disponibil" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Etichetă Cod Proiect" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Utilizator" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Preț" @@ -1652,7 +1652,7 @@ msgstr "Nume pentru acest webhook" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activ" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "Descrierea piesei furnizorului" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: 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:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Este versiune" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Are Versiuni" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "Responsabil pentru acest capitol" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Descriere test" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Introduceți descrierea pentru acest test" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Este necesar acest test pentru a trece?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Parolă" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Parolă pentru utilizator" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Suprascrie avertismentul cu privire la regulile parolei" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: 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:490 +#: 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 01bae25974..7626cc3fdd 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "Заметки" @@ -215,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 "Электронная почта" @@ -269,7 +269,7 @@ msgstr "Неверный выбор" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "Сервер зарегистрировал ошибку." msgid "Image" msgstr "Изображение" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "Тип содержимого не соответствует требуемому классу миксина" @@ -536,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" @@ -561,21 +561,21 @@ msgstr "Статус заказа" msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "Включая варианты" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Категория" @@ -665,89 +665,89 @@ msgstr "Максимальная дата" msgid "Exclude Tree" msgstr "Исключить дерево" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Расходник" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Необязательно" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Сборная деталь" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Тестируемая" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Невыполненные заказы" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Потреблено" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "В заказе" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Выход" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Фильтрация по идентификатору исходящей складской позиции. Используйте 'null', чтобы найти несмонтированные элементы сборки." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Заказы на производство" @@ -783,9 +783,9 @@ msgstr "Целевая дата должна быть после даты нач msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Место хранения комплектующих" @@ -861,16 +861,16 @@ msgstr "Статус заказа на производство" msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "Дата создания" @@ -907,120 +907,120 @@ msgstr "Создано" msgid "User who issued this build order" msgstr "Пользователь, создавший этот заказ на производство" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Ответственный" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Ссылка на внешний URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Приоритет производства" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Код проекта" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Невозможно завершить заказ на сборку при наличии открытых дочерних сборок" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Невозможно завершить заказ на сборку при незавершенных выходах" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Не удалось выгрузить задачу для распределения на сборку" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Заказ на производство {build} был завершен" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых деталей должны быть указаны серийные номера" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "Выход сборки не прошёл все необходимые тесты" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "Выделенные на складе товары все еще находятся в производстве" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Невозможно частично завершить выход сборки с распределёнными элементами" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Номер позиции для производства" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Объект производства" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Количество" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Количество израсходованного запаса" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "Складская позиция" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Установить в" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Целевая складская позиция" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Уровень сборки" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Наименование детали" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Местоположение склада для результата сборки" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, даже если остатки не были полностью зарезервированы" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "Израсходовать зарезервированные остатки" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "Израсходовать складские позиции, которые были зарезервированы для этой продукции" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "Производственный заказ имеет незавершённые дочерние заказы" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "Заказ на производство должен быть в стадии выполнения" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Ссылка на спецификацию (BOM)" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID детали в спецификации (BOM)" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Название детали в спецификации (BOM)" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "Установить в" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Зарезервированное количество" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Ссылка на сборку" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Название категории детали" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Отслеживание" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "Запланировано к сборке" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Доступный запас" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Доступный запас заменителей" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Доступный запас вариантов" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "Потреблённое количество превышает выделенное количество" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "Дополнительные примечания по расходу запаса" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "Элемент сборки должен ссылаться на правильный заказ на сборку" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "Дублирование выделения элемента сборки" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "Строка сборки должна ссылаться на правильный заказ на сборку" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "Дублирование выделения строки сборки" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "Должен быть указан хотя бы один элемент или строка" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "Просроченный заказ сборки" msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Ссылка" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Файл" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "У пользователя нет прав для удаления этих вложений" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "У пользователя нет прав на удаление этого вложения" @@ -1550,7 +1550,7 @@ msgstr "Не указаны действительные коды валют" msgid "No plugin" msgstr "Нет плагина" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "Название кода проекта" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Пользователь" msgid "Price break quantity" msgstr "Скидка распространяется на заданное количество" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Цена" @@ -1652,7 +1652,7 @@ msgstr "Имя для этого веб-хука" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Активный" @@ -1849,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 "Указан недопустимый тип модели для вложения" @@ -2058,7 +2058,7 @@ msgstr "У параметров-переключателей не может б msgid "Checkbox parameters cannot have choices" msgstr "У параметров-переключателей не может быть вариантов" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Варианты должны быть уникальными" @@ -2094,7 +2094,7 @@ msgstr "Переключатель" msgid "Is this parameter a checkbox?" msgstr "Этот параметр является переключателем?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Варианты" @@ -2106,7 +2106,7 @@ msgstr "Возможные варианты этого параметра (ра msgid "Selection list for this parameter" msgstr "Список выбора для этого параметра" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Включено" @@ -2126,7 +2126,7 @@ msgstr "Параметры" msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Указан неверный тип модели для параметра" @@ -2140,7 +2140,7 @@ msgstr "ID целевой модели для этого параметра" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" @@ -2148,7 +2148,7 @@ msgstr "Шаблон" msgid "Parameter template" msgstr "Шаблон параметра" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Данные" @@ -2156,18 +2156,18 @@ msgstr "Данные" msgid "Parameter Value" msgstr "Значение параметра" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Опциональное поле записей" @@ -2391,85 +2391,85 @@ 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 +#: 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 "Список выбора заблокирован" @@ -2859,8 +2859,8 @@ msgstr "По умолчанию детали являются шаблонами msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:489 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 "Компонент" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Выключено: полный путь категории отображается во всплывающей подсказке. Включено: полный путь категории отображается как обычный текст." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Получать отчёты об ошибках" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Получать уведомления о системных ошибках" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Последние использованные печатающие машины" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Сохранять последние использованные печатающие машины для пользователя" @@ -3988,33 +3996,33 @@ msgstr "Деталь активна" msgid "Manufacturer is Active" msgstr "Производитель активен" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Поставляемая деталь активна" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Внутренняя деталь активна" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Поставщик активен" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Есть запас" @@ -4195,7 +4203,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 "Производитель детали" @@ -4213,12 +4221,12 @@ msgstr "Выберите деталь" msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "Артикул производителя" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "Артикул поставщика" @@ -4282,16 +4290,16 @@ msgstr "Ссылка на сайт поставщика" msgid "Supplier part description" msgstr "Описание детали поставщика" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Количество в упаковке" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Общее количество, поставляемое в одной упаковке. Оставьте пустым для отдельных элементов." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "множественные" @@ -4339,14 +4347,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 "Произошла ошибка при экспорте данных" @@ -4451,67 +4463,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" @@ -4821,7 +4833,7 @@ msgstr "Заказ" msgid "Order Complete" msgstr "Заказ выполнен" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Внутренняя деталь" @@ -4918,7 +4930,7 @@ msgstr "Начальная дата" msgid "Scheduled start date for this order" msgstr "Запланированная начальная дата этого заказа" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "Целевая дата" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Ссылка на заказ" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Статус" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Получено" msgid "Number of items received" msgstr "Количество полученных предметов" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "Закупочная цена" @@ -5211,8 +5223,8 @@ msgstr "Проверн" msgid "User who checked this shipment" msgstr "Пользователь, проверивший эту отгрузку" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "Отправление" @@ -5277,7 +5289,7 @@ msgstr "Количество распределения не может прев msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" @@ -5393,7 +5405,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 "Скопировать параметры" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Имя поставщика" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Заказ не может быть отменён" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "Разрешить закрывать заказ с незавершёнными позициями" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "В заказе есть незавершённые позиции" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Автоматическая цена" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Валюта заказа на закупку" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Объединять элементы" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Внутреннее название детали" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Необходимо указать поставляемую деталь" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Необходимо указать заказ на закупку" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Поставщик должен соответствовать заказу на закупку" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Заказ на закупку должен соответствовать поставщику" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "Введите дату истечения срока годности для поступающих складских единиц" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "Переопределить информацию об упаковке для поступающих складских единиц" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "Дополнительная заметка для поступающих складских единиц" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Штрихкод уже используется" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Необходимо предоставить позиции" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Необходимо указать место назначения" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Предоставленные значения штрихкодов должны быть уникальными" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Отгрузки" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Выполненные отгрузки" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Зарезервированные позиции" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Выделенные элементы" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Информация об отгрузке не предоставлена" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "Позиция не связана с этим заказом" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Количество должно быть положительным" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Отгрузка уже отправлена" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "Отгрузка не связана с этим заказом" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "Совпадений для следующих серийных номеров не найдено" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Следующие серийные номера недоступны" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Позиция заказа на возврат" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "Позиция не соответствует заказу на возврат" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Позиция уже получена" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Количество для возврата" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Валюта цены позиции" @@ -5732,71 +5744,71 @@ msgstr "Исключить подкатегории указанной кате msgid "Has Results" msgstr "Есть результаты" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Является вариантом" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Является ревизией" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Есть ревизии" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "Спецификация валидна" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Каскадные категории" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Если включено, включать элементы в дочерних категориях указанной категории" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Фильтровать по числовому идентификатору категории или литералу 'null'" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "Сборочная деталь активна" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "Отслеживаемая сборочная деталь" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Сборная деталь тестируется" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "Деталь компонента активна" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "Отслеживаемая деталь компонента" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Компонент тестируется" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "Сборочная деталь компонента" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "Виртуальная деталь компонента" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "На складе" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Использования" @@ -5805,7 +5817,7 @@ msgstr "Использования" msgid "Part Category" msgstr "Категория детали" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Категория детали" @@ -5837,7 +5849,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 "Значок (необязательно)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Детали" @@ -5973,7 +5985,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 "Внутренний артикул" @@ -6006,7 +6018,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 "Минимальный запас" @@ -6086,756 +6098,756 @@ msgstr "Создатель" msgid "Owner responsible for this part" msgstr "Ответственный владелец этой детали" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Валюта, используемая для кэширования расчётов цен" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Минимальная стоимость компонентных деталей" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Максимальная стоимость компонентных деталей" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Минимальная стоимость закупки" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Минимальная историческая стоимость закупки" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Максимальная стоимость закупки" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Максимальная историческая стоимость закупки" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Минимальная внутренняя цена" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Минимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Максимальная внутренняя цена" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Максимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Минимальная цена поставщика" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Минимальная цена детали от внешних поставщиков" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Максимальная цена поставщика" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Максимальная цена детали от внешних поставщиков" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Минимальная стоимость варианта" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Расчётная минимальная стоимость вариантов деталей" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Максимальная стоимость варианта" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Расчётная максимальная стоимость вариантов деталей" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Переопределить минимальную стоимость" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Переопределить максимальную стоимость" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Расчётная общая минимальная стоимость" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Расчётная общая максимальная стоимость" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Минимальная цена продажи" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Минимальная цена продажи на основе ценовых уровней" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Максимальная цена продажи" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Максимальная цена продажи на основе ценовых уровней" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Минимальная стоимость продажи" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Минимальная историческая цена продажи" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Максимальная стоимость продажи" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Максимальная историческая цена продажи" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Деталь для инвентаризации" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Количество элементов" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Количество отдельных складских позиций на момент инвентаризации" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Общий доступный запас на момент инвентаризации" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Дата" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Дата проведения инвентаризации" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Минимальная стоимость запасов" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Оценочная минимальная стоимость имеющихся запасов" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Максимальная стоимость запасов" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Оценочная максимальная стоимость имеющихся запасов" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Цена продажи детали по порогу" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Шаблон теста детали" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Недопустимое имя шаблона — должно содержать хотя бы один буквенно-цифровой символ" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Шаблоны тестов можно создавать только для тестируемых деталей" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Шаблон теста с тем же ключом уже существует для детали" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Ключ теста" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Упрощённый ключ для теста" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Активен ли данный тест?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Необходим" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Необходимо ли пройти этот тест?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Требуется ли значение для этого теста при добавлении результата?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Требуются вложения" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Требуется ли прикреплять вложение в виде файла при добавлении результатов теста?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Допустимые варианты данного теста(через запятую)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "Пункт спецификации нельзя изменить — сборка заблокирована" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Пункт спецификации нельзя изменить — вариант сборки заблокирован" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Количество элементов в спецификации" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Эта позиция спецификации необязательна" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник (она не отслеживается в заказах на производство)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Количество для подготовки" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Дополнительное требуемое количество для сборки, учитывающее потери при подготовке" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Потери" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Оценочные потери для сборки, выраженные в процентах (0–100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Округление до кратности" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Округлять требуемое производственное количество до ближайшего кратного этого значения" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Ссылка на позицию спецификации" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Заметка о позиции в спецификации" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Контрольная сумма строки спецификации" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Проверен" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Этот пункт спецификации подтверждён" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Наследуется" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Позиция спецификации наследуется разновидностями детали" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Эту позицию можно заменять деталями, которые находятся на складе" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Необходимо указать поддеталь" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Замена пункта спецификации" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Деталь для замены не может быть такой же, как основная деталь" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Деталь 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Деталь 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Выберите связанную деталь" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Заметка для данной связи" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Нельзя создать отношение детали с самой собой" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "Копировать детали-заменители при дублировании пунктов спецификации" @@ -7758,7 +7770,7 @@ msgstr "Пакетный плагин" msgid "Plugin" msgstr "Плагин" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Автор не найден" @@ -8288,7 +8300,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 "Установленные элементы" @@ -8361,7 +8373,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 "Основной склад" @@ -8445,7 +8457,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 "Залежалый" @@ -8530,7 +8542,7 @@ msgstr "Значок по умолчанию для мест хранения с msgid "Stock Location" msgstr "Место хранения" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Места хранения" @@ -8579,7 +8591,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 "Складская позиция не может быть создана для виртуальных деталей" @@ -8624,7 +8636,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 "Упаковка этой складской позиции хранится в" @@ -8640,7 +8652,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 "Код партии для этой складской позиции" @@ -8753,7 +8765,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 "Дублирующие складские элементы" @@ -8877,7 +8889,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 "Шаблон теста для этого результата" @@ -8901,222 +8913,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 "Предыдущий серийный номер" @@ -9582,115 +9594,119 @@ msgstr "Основная группа" msgid "Primary group for the user" msgstr "Основная группа для пользователя" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Админ" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Заказы на закупку" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Заказы на продажу" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Суперпользователь" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Это пользователь является суперпользователем" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Активна эта учетная запись" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "Только суперпользователь может изменить это поле" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Пароль" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Пароль пользователя" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Игнорировать предупреждение" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Игнорировать предупреждение о правилах пароля" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "У вас нет разрешения на создание пользователей" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ваша учётная запись была успешно создана." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Пожалуйста, используйте функцию сброса пароля для входа" -#: users/serializers.py:490 +#: 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 7434729026..405e3ff31d 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "" @@ -215,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 "" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 00b3c3b084..c32d5b5e6e 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Neobvezno" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Sledi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testno" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Dodeljeno" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Nalogi izgradnje" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Lokacija vira" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Izdal" msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Odgovoren" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Odgovorni uporabnik ali skupina za to naročilo" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Zunanja povezava" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Količina" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Izdelana postavka mora imeti izgradnjo, če je glavni del označen kot sledljiv" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:223 +#: build/serializers.py:231 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:235 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Uporabnik" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivno" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuporabnik" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "Ali je ta uporabnik superuporabnik" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Ali je ta račun aktiven" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Vaš račun je bil ustvarjen." -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" -#: users/serializers.py:490 +#: 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 d2b1ffc79e..82ce13a63f 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "Ne uključuj stablo" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Opciono" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Praćeno" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Proverljivo" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Alocirano" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Nalozi za izradu" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Lokacija izvora" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "izdato od" msgid "User who issued this build order" msgstr "Korisnik koji je izdao nalog za izgradnju" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Odgovoran" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Korisnik ili grupa koja je odgovorna za ovaj nalog za izgradnju" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Spoljašnja konekcija" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Link za eksterni URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Prioritet izgradnje" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Prioritet ovog naloga za izgradnju" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Kod projekta" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Kod projekta za ovaj nalog za izgradnju" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Nije uspelo preuzimanje zadataka da bi se dovršila alokacija izgradnje" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog za izgradnju {build} je kompletiran" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Nalog za izgradnju je kompletiran" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Za delove koji mogu da se prate moraju se dostaviri serijski brojevi" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Nije određen izlaz izgradnje" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Izlaz izgradnje je već kompletiran" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Stavka porudžbine naloga za izgradnju" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Objekat izgradnje" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Količina" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Potrebna količina za nalog za izgradnju" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Stavka izgradnje mora imati izlaz izgradnje, jer je nadređeni deo markiran da može da se prati" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Izabrana stavka zaliha se ne slaže sa porudžbinom sa spiska materijala" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Alocirana količina ({q}) ne sme da bude veća od količine dostupnih zaliha ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Izvor stavke zaliha" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Količina zaliha za alociranje za izgradnju" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Ugradi u" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Stavka zaliha odredišta" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Nivo izgradnje" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Ime dela" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Izlaz izgradnje" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 msgid "This build output has already been completed" msgstr "Ovaj izlaz izgradnje je već kompletiran" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Unesi količinu za izlaz izgradnje" -#: build/serializers.py:331 +#: build/serializers.py:339 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:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 msgid "Enter serial numbers for build outputs" msgstr "Unesi serijske brojeve za izlaz izgradnje" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Lokacija zaliha za izlaz izgradnje" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Automatski alociraj serijske brojeve" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "Lista izlaza izgradnje se mora obezbediti" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "Lokacija zaliha za otpisane izlaze" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Odbaci alokacije" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Odbaci bilo kojiu alokaciju zaliha za otpisane izlaze" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "Razlog za otpisane izlaz(e) izgradnje" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Lokacija za završene izlaze izgradnje" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Prihvati nekompletirane Alokacije" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Troši alocirane zalihe" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Ukloni nekompletirane izlaze" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "Nije dozvoljeno" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 msgid "Deallocate before completing this build order" msgstr "Izmesti bre završetka ovog naloga za izgradnju" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Sveukupne izdvojene zalihe" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Neke stavke zaliha su prealocirane" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Prihvati nealocirano" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Tražene zalihe nisu u potpunosti alocirane" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Prihvati nekompletirano" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Traženi broj izgradnji nije kompletan" -#: build/serializers.py:816 +#: build/serializers.py:824 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:827 msgid "Build order must be in production state" msgstr "Nalog za izgradnju mora biti u stanju produkcije" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Nalog za izgradnju ima nekompletne izlaze" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Porudžbina izgradnje" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Izlaz izgradnje" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "Izlaz izgradnje mora da referencira istu izgradnju" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "Stavka porudžbine za izradu" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Stavka mora da bude u zalihama" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "Stavke alociranja se moraju odrediti" -#: build/serializers.py:1087 +#: build/serializers.py:1095 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:1104 msgid "Exclude Location" msgstr "Isključi lokaciju" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Isključi stavke zaliha za ovu selektovanu lokaciju" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Zamenljive zalihe" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Zamenske zalihe" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Dozvoli alociranje delova koji su zamenski" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "Opcionalne stavke" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "Alociraj opcione BOM stavke na nalog za izgradnju" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "Referenca BOM" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "BOM ID dela" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "BOM ime dela" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Alocirana količina" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Referenca izgradnje" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Ime kategorije dela" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Može da se prati" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "BOM stavka" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Dostupne zalihe" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Dostupne zamenske zalihe" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Dostupne varijante zaliha" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "je link" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "je datoteka" -#: common/api.py:790 +#: 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:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "Korisnik nema dozvolu da izbriše ovaj atačment" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Korisnik" msgid "Price break quantity" msgstr "Prelomna količina cene" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Cena" @@ -1652,7 +1652,7 @@ msgstr "Ime ovog zahteva za izmenu stranice" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivan" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Checkbox parametri ne mogu imati jedinice" msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parametri ne mogu imati izbore" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Izbori moraju biti jedinstveni" @@ -2094,7 +2094,7 @@ msgstr "Polje za potvrdu" msgid "Is this parameter a checkbox?" msgstr "Da li je ovaj parametar checkbox?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Izbori" @@ -2106,7 +2106,7 @@ msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)" msgid "Selection list for this parameter" msgstr "Lista izbora za ovaj parametar" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Omogućen" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Šablon" @@ -2148,7 +2148,7 @@ msgstr "Šablon" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Podaci" @@ -2156,18 +2156,18 @@ msgstr "Podaci" msgid "Parameter Value" msgstr "Vrednost parametra" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "Opciona beleška" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Podrazumevano je da su delovi šabloni" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Primaj izveštaje o greškama" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Primaj notifikacije za sistemske greške" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Poslednje korišćene mašine za štampanje" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Sačuvaj poslednju korišćenu mašinu za štampanje za korisnika" @@ -3988,33 +3996,33 @@ msgstr "Deo je aktivan" msgid "Manufacturer is Active" msgstr "Proizvođač je aktivan" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Deo dobavljača je aktivan" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Interni deo je aktivan" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Dobavljač je aktivan" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Ima zalihe" @@ -4195,7 +4203,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" @@ -4213,12 +4221,12 @@ msgstr "Izaberi deo" msgid "Select manufacturer" msgstr "Izaberi proizvođača" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL za link dela eksternog dobavljača" msgid "Supplier part description" msgstr "Opis dela dobavljača" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "osnovni trošak" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Količina pakovanja" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Ukupna količina dostavljena u jednom pakovanju. Ostaviti prazno za pojedinačne stavke." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "više" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Nalog" msgid "Order Complete" msgstr "Nalog završen" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Interni deo" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Referenca naloga" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Primljeno" msgid "Number of items received" msgstr "Broj primljenih stavki" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Provereno od strane" msgid "User who checked this shipment" msgstr "Korisnik koji je proverio ovu isporuku" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Alocirana količina ne sme da pređe količinu zaliha" msgid "Allocation quantity must be greater than zero" msgstr "Količina alokacije mora da bude veća od nule" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Naziv dobavljača" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Nalog ne može biti otkazan" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Nalog ima nepotpune stavke porudžbine" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Nalog nije otvoren" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Automatske cene" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Valuta kupovne cene" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Spoj stavke" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Interni naziv dela" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Deo dobavljača mora biti određen" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Nalog za kupovinu mora biti određen" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "Nalog za kupovinu mora da se poklapa sa dobavljačem" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Stavka porudbžine" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: 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:847 +#: 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:855 order/serializers.py:2037 +#: 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:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Bar kod" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Skeniran bar kod" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Bar kod je već u upotrebi" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Stavke porudžbine moraju biti dostavljene" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Odredišna lokacija mora biti određena" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Isporuke" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Završene isporuke" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Valuta prodajne cene" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Alocirane stavke" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Nisu dostavljeni detalji isporuke" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Količina mora biti pozitivna" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Unesi serijske brojeve za alokaciju" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Isporuka je već isporučena" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Sledeći serijski brojevi su nedostupni" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "Stavka porudžbine naloga za vraćanje" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Stavka porudžbine je već primljena" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "Količina za vraćanje" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Valuta cene porudžbine" @@ -5732,71 +5744,71 @@ msgstr "Ne uključuj pod-kategorije pod specifičnom kategorijom" msgid "Has Results" msgstr "Ima rezultate" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Je revizija" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Ima revizije" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "Spisak materijala validan" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Deo sklopa se može testirati" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Deo komponente se može testirati" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Koristi" @@ -5805,7 +5817,7 @@ msgstr "Koristi" msgid "Part Category" msgstr "Kategorija dela" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Kategorije delova" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Delovi" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Korisnik koji je kreirao" msgid "Owner responsible for this part" msgstr "Vlasnik odgovoran za ovaj deo" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Prodaj više" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Valuta korišćena za vršenje proračuna o cenama" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimalna vrednost spiska materijala" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Minimalna vrednost komponenti delova" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maksimalna vrednost spiska materijala" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Maksimalna vrednost komponenti delova" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimalna kupovna vrednost" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Minimalna istorijska kupovna vrednost" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maksimalna kupovna vrednost" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Maksimalna istorijska kupovna vrednost" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimalna interna cena" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Minimalna cena bazirana na internim sniženjima cena" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maksimalna interna cena" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Maksimalna vrednost bazirana na internim sniženjima cena" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Minimalna cena dobavljača" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Minimalna cena dela od eksternih dobavljača" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Maksimalna cena dobavljača" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Maksimalna cena dela od eksternih dobavljača" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Minimalna vrednost varijanti" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Izračunata minimalna vrednost varijanti delova" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Maksimalna vrednost varijanti" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Izračunata maksimalna vrednost varijanti delova" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimalna vrednost" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Promeni minimalnu vrednost" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maksimalna vrednost" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Promeni maksimalnu vrednost" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Ukupna izračunata minimalna vrednost" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Ukupna izračunata maksimalna vrednost" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Minimalna prodajna cena" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Minimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Maksimalna prodajna cena" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Maksimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Minimalna prodajna vrednost" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Minimalna istorijska prodajna cena" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Maksimalna prodajna vrednost" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Maksimalna istorijska prodajna cena" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Deo za popis" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Broj stavki" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Broj individualnih unosa zaliha u vreme popisa" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Ukupne dostupne zalihe za vreme popisa" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Datum kada je izvršen popis" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Minimalna vrednost zaliha" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Procenjena minimalna vrednost trenutnih zaliha" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maksimalna vrednost zaliha" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Procenjena maksimalna vrednost trenutnih zaliha" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Smanjenje prodajne cene dela" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Šablon testa dela" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nevažeći naziv šablona - mora da uključuje bar jedan alfanumerički karakter" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Test šabloni mogu biti kreirani samo za delove koje je moguće testirati" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Test šablon sa istim ključem već postoji za ovaj deo" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Naziv testa" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Unesi naziv za ovaj test" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Test ključ" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Pojednostavljen ključ za test" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Opis testa" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Unesi opis za ovaj test" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Da li je ovaj test omogućen?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Neophodno" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Da li je neophodno da ovaj test prođe?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Zahteva vrednost" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Da li ovaj test zahteva vrednost prilikom dodavanja rezultata testa?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Zahteva prilog" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Da li ovaj test zahteva fajl kao prilog prilikom dodavanja rezultata testa?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Validni izbori za ovaj test (razdvojeni zapetom)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje je zaključano" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje varijanti je zaključano" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Izaberi nadređeni deo" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Pod-deo" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Izaberi deo koji će biti korišćen u spisku materijala" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Količina spiskova materijala za ovu stavku sa spiska materijala" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Ova stavka sa spiska materijala je opciona" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ova stavka sa spiska materijala se može potrošiti (nije praćena u nalozima za izradu)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Referenca stavke sa spiska materijala" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Beleške stavki sa spiska materijala" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Suma" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Suma spiska materijala" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Validirano" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Ova stavka sa spiska materijala je validirana" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Biva nasleđeno" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ova stavka sa spiska materijala je nasleđivana od spiska materijala za varijante delova" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Stavke sa zaliha za varijante delova se mogu koristiti za ovu stavku sa spiska materijala" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Količina mora biti ceo broj za delove koji se mogu pratiti" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Zamenski deo mora biti određen" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Zamenska stavka sa spiska materijala" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Zamenski deo ne može biti isti kao glavni deo" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Nadređena stavka sa spiska materijala" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Zamenski deo" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Deo 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Deo 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Izaberi povezan deo" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Beleška za ovu relaciju" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacija između delova ne može biti kreirana između jednog istog dela" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "Paket plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Nije pronađen autor" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "Podrazumevana ikonica za sve lokacije koje nemaju podešenu ikonicu (opc msgid "Stock Location" msgstr "Lokacija zaliha" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Lokacija zaliha" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Admin" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Nalozi za kupovinu" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Nalozi za prodaju" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Super korisnik" -#: users/serializers.py:328 users/serializers.py:418 +#: 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:332 users/serializers.py:425 +#: 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:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Vaš nalog je kreiran" -#: users/serializers.py:484 +#: 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:490 +#: 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 4f7b647b34..8c251d42cb 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Valfri" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Spårad" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Testbar" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Allokerad" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Konsumerad" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Byggordrar" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "Tillverknings order referens" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Källa Plats" @@ -861,16 +861,16 @@ msgstr "Tillverknings status" msgid "Build status code" msgstr "Tillverkning statuskod" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Utfärdad av" msgid "User who issued this build order" msgstr "Användare som utfärdade denna tillverknings order" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Ansvarig" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Extern länk" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Länk till extern URL" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Projektkod" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Tillverknings order {build} har slutförts" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Bygg objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Antal" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Byggobjekt måste ange en byggutgång, eftersom huvuddelen är markerad som spårbar" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Installera till" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Delnamn" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "Ange serienummer för att tillverkade produkter" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Lagerplats för skrotade produkter" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "Ignorera alla lagerallokeringar för skrotade produkter" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Plats för färdiga produkter" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "Ta bort ofullständiga produkter" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Tillverknings ordern är ofullständig" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Spårbar" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Är länk" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Är fil" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Användare" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Pris" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Kryssruta" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Val" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Aktiverad" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mall" @@ -2148,7 +2148,7 @@ msgstr "Mall" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Data" @@ -2156,18 +2156,18 @@ msgstr "Data" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "Välj del" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Intern del" @@ -4918,7 +4930,7 @@ msgstr "Startdatum" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Status" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "Kontrollerad av" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "Har resultat" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Är variant" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Använder" @@ -5805,7 +5817,7 @@ msgstr "Använder" msgid "Part Category" msgstr "Delkategori" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Artiklar" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Validerad" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "Primär grupp" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Admin" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superanvändare" -#: users/serializers.py:328 users/serializers.py:418 +#: 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:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Är detta användarkonto aktivt" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "Lösenord" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Ditt konto har skapats." -#: users/serializers.py:484 +#: 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:490 +#: 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 f546f6c0c8..1fe5cc8972 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "หมายเหตุ" @@ -215,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 "อีเมล" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "ออกโดย" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "ผู้ใช้งาน" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "" @@ -2148,7 +2148,7 @@ msgstr "" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "" @@ -2156,18 +2156,18 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "" @@ -4213,12 +4221,12 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "สถานะ" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "ชิ้นส่วน" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 34261b0039..51b87a5749 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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" @@ -536,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" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -665,89 +665,89 @@ msgstr "Maksimum Tarih" msgid "Exclude Tree" msgstr "Ağacı Hariç Tut" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "İsteğe Bağlı" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "İzlenen" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Test Edilebilir" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 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:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "Tahsis Edildi" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Tüketildi" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "Çıktı" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Çıktı stok kalemi ID'sine göre filtrele. Takılmamış üretim kalemlerini bulmak için ‘null’ kullan." -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Üretim Emirleri" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Kaynak Konum" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Düzenleyen" msgid "User who issued this build order" msgstr "Bu üretim emrini düzenleyen kullanıcı" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Sorumlu" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Bu üretim emrinden sorumlu kullanıcı veya grup" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Üretim Önceliği" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "Bu üretim emrinin önceliği" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Proje Kodu" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Bu üretim emri için proje kodu" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "Açık alt üretim işlemleri varken üretim emri tamamlanamaz" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "Eksik çıktılar varken üretim emri tamamlanamaz" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Üretim tahsisatını tamamlamak için boşaltma görevi başarısız oldu" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "{build} üretim emri tamamlandı" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "Bir üretim emri tamamlandı" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Hiçbir üretim çıktısı belirtilmedi" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Üretim çıktısı zaten tamamlanmış" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 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:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "{serial} üretim çıktısı gerekli testleri geçmedi" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "Tahsis edilen stok kalemleri hâlâ üretimde" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "Tahsisli kalemler içeren bir üretim çıktısı kısmi olarak tamamlanamaz" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Üretim Emri Satırı" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ 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" msgstr "Miktar" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Üretim emri için gereken miktar" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "Tüketilen Stok Miktarı" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Ana parça izlenebilir olarak işaretlendiğinden, üretim kalemi bir üretim çıktısı belirtmelidir" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Seçilen stok kalemi BOM satırı ile eşleşmiyor" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tahsis edilen miktar ({q}) mevcut stok miktarını ({a}) aşmamalıdır" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Üretime tahsis edilecek stok miktarı" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Kur" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Üretim Seviyesi" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "Parça Adı" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "Üretim Çıktısı" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 msgid "This build output has already been completed" msgstr "Bu üretim çıktısı zaten tamamlandı" -#: build/serializers.py:241 +#: build/serializers.py:249 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:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "Üretim çıktısının miktarını girin" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "İzlenebilir parçalar için tamsayı miktar gerekir" -#: build/serializers.py:337 +#: build/serializers.py:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 msgid "Enter serial numbers for build outputs" msgstr "Üretim çıktıları için seri numaraları girin" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "Üretim çıktısı için stok konumu" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Seri Numaralarını Otomatik Tahsis Et" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için stok konumu" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Ayırmaları İptal Et" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 msgid "Reason for scrapping build output(s)" msgstr "Üretim çıktı(larını) hurdaya ayırma nedeni" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "Tamamlanan üretim çıktıları içi konum" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "Tamamlanmamış Ayırmayı Onayla" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Tahsis Edilen Stoku Tüket" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 msgid "Remove Incomplete Outputs" msgstr "Tamamlanmamış Çıktıları Kaldır" -#: build/serializers.py:698 +#: build/serializers.py:706 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:733 msgid "Not permitted" msgstr "İzin verilmedi" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 msgid "Deallocate before completing this build order" msgstr "Bu üretim emrini tamamlamadan önce tahsisi kaldır" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "Aşırı Tahsis Edilmiş Stok" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 msgid "Some stock items have been overallocated" msgstr "Bazı stok kalemleri aşırı tahsis edilmiştir" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "Tahsis Edilmeyeni Kabul Et" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "Tamamlanmamış Kabul et" -#: build/serializers.py:793 +#: build/serializers.py:801 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:812 msgid "Required build quantity has not been completed" msgstr "Gereken üretim miktarı tamamlanmadı" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "Üretim emrinin açık alt üretim emirleri var" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "Üretim emri üretim durumunda olmalıdır" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "Üretim emrinde eksik çıktılar var" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "Üretim Satırı" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Üretim çıktısı" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "Üretim çıktısı aynı üretimi göstermelidir" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "Üretim Satırı" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "Kalem stokta olmalıdır" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Konumu Hariç Tut" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "Bu seçilen konumdan stok kalemlerini hariç tut" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "Birbirinin Yerine Kullanılabilir Stok" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Yedek Stok" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "Yedek parçaların ayrılmasına izin ver" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "İsteğe Bağlı Ögeler" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "Tüm Ögeler" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "Takip edilmeyen kalemler" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "Takipli Kalemler" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "Kalem Türü" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "Otomatik tahsis edilecek ürün tipini seçin" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "ML Referansı" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "BOM Parça ID" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "ML Parça Adı" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "Kur" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Tahsis Edilen Miktar" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Üretim Referansı" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Parça Kategorisi Adı" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Takip Edilebilir" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Devralınmış" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "ML Ögesi" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 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:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Mevcut Stok" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Mevcut Yedek Stok" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Mevcut Varyant Stok" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "Tüketilen miktar tahsis edilen miktarı aşıyor" -#: build/serializers.py:1766 +#: build/serializers.py:1790 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:1807 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:1812 msgid "Duplicate build item allocation" msgstr "Üretim kalemi tahsisini yinele" -#: build/serializers.py:1806 +#: build/serializers.py:1830 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:1835 msgid "Duplicate build line allocation" msgstr "Üretim satırı tahsisini yinele" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "En az bir kalem veya satır sağlanmalıdır" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "Geciken Üretim Emri" msgid "Build order {bo} is now overdue" msgstr "{bo} üretim emri şimdi gecikti" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "Link Olanlar" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "Dosya Olanlar" -#: common/api.py:790 +#: 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:803 +#: 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" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Kullanıcı" msgid "Price break quantity" msgstr "Fiyat kademesi miktarı" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Fiyat" @@ -1652,7 +1652,7 @@ msgstr "Bu web kancası için ad" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" @@ -1849,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" @@ -2058,7 +2058,7 @@ msgstr "Onay kutusu parametrelerinin birimleri olamaz" msgid "Checkbox parameters cannot have choices" msgstr "Onay kutusu parametrelerinin seçenekleri olamaz" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Seçenekler eşsiz olmalıdır" @@ -2094,7 +2094,7 @@ msgstr "Onay kutusu" msgid "Is this parameter a checkbox?" msgstr "Bu parametre bir onay kutusu mu?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Seçenekler" @@ -2106,7 +2106,7 @@ msgstr "Bu parametre için geçerli seçenekler (virgül ile ayrılmış)" msgid "Selection list for this parameter" msgstr "Bu parametre için seçim listesi" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Etkin" @@ -2126,7 +2126,7 @@ msgstr "Parametreler" msgid "Invalid choice for parameter value" msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2752 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" @@ -2140,7 +2140,7 @@ msgstr "Bu parametre için hedef modelin ID'si" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Şablon" @@ -2148,7 +2148,7 @@ msgstr "Şablon" msgid "Parameter template" msgstr "Parametre şablonu" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Veri" @@ -2156,18 +2156,18 @@ msgstr "Veri" msgid "Parameter Value" msgstr "Parametre Değeri" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "İsteğe bağlı not alanı" @@ -2391,85 +2391,85 @@ 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 +#: 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" @@ -2859,8 +2859,8 @@ msgstr "Parçaları varsayılan olan şablondur" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "Devre dışı: Tam kategori yolu fareyle üzerine gelindiğinde bir araç ipucu olarak görüntülenir. Etkin: Tam kategori yolu düz metin olarak görüntülenir." #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Hata raporları alın" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Sistem hataları için bildirim alın" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "Son kullanılan yazdırma makineleri" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "Son kullanılan yazdırma makinelerini bir kullanıcı için kaydet" @@ -3988,33 +3996,33 @@ msgstr "Parça Aktif" msgid "Manufacturer is Active" msgstr "Üretici Aktif" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Tedarikçi Parçası Aktif" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "Ana Tedarikçi Parçası" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Dahili Parça Aktif" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "Tedarikçi Aktif" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "Stoku Var" @@ -4195,7 +4203,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ı" @@ -4213,12 +4221,12 @@ msgstr "Parça seçin" msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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ı" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "Harici tedarikçi parçası bağlantısı için URL" msgid "Supplier part description" msgstr "Tedarikçi parçası açıklaması" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum ücret (örneğin stoklama ücreti)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "Paket Miktarı" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Tek bir pakette tedarik edilen toplam miktar. Tekli ürünler için boş bırakın." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "çoklu" @@ -4339,14 +4347,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" @@ -4451,67 +4463,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" @@ -4821,7 +4833,7 @@ msgstr "Sipariş" msgid "Order Complete" msgstr "Sipariş Tamamlandı" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Dahili Parça" @@ -4918,7 +4930,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:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Sipariş referansı" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Durum" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Teslim Alındı" msgid "Number of items received" msgstr "Teslim alınan miktar" -#: order/models.py:2008 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ı" @@ -5211,8 +5223,8 @@ msgstr "Kontrol Eden" msgid "User who checked this shipment" msgstr "Bu sevkiyatı kontrol eden kullanıcılar" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Tahsis miktarı stok miktarını aşamaz" msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: order/models.py:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tedarikçi Adı" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Sipariş iptal edilemez" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "Siparişin eksik satırları var" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Sipariş açık değil" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "Otomatik Fiyatlandırma" -#: order/serializers.py:653 +#: 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:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Satın alma fiyatı para birimi" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "Kalemleri Birleştir" -#: order/serializers.py:691 +#: 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:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "SKU" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "Dahili Parça Adı" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "Tedarikçi parçası belirtilmeli" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Satın alma siparişi belirtilmeli" -#: order/serializers.py:747 +#: 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:748 +#: 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:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Satır" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "Gelen stok kalemleri için parti numarası girin" -#: order/serializers.py:828 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:829 +#: 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:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "Gelen stok kalemlerinin seri numaralarını girin" -#: order/serializers.py:847 +#: 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:855 order/serializers.py:2037 +#: 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:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Barkod" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Taranan barkod" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Barkod zaten kullanımda" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "Satırlar sağlanmalıdır" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Hedef konum belirtilmelidir" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "Sağlanan barkod değerleri benzersiz olmalıdır" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "Sevkiyatlar" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Tamamlanan Sevkiyatlar" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Satış para birimi" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "Sevkiyat bilgileri sağlanmadı" -#: order/serializers.py:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Miktar pozitif olmalıdır" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Tahsis edilecek seri numaralarını girin" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "Sevkiyat zaten sevk edildi" -#: order/serializers.py:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "Şu seri numaraları mevcut değildir" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "İade siparişi kalemi" -#: order/serializers.py:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Ürün kalemi zaten teslim alındı" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "İade olacak miktar" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Satır para birimi" @@ -5732,71 +5744,71 @@ msgstr "Belirtilen kategorideki alt kategorileri hariç tut" msgid "Has Results" msgstr "Sonuçları Olanlar" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "Varyant mı" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "Revizyon mu" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "Revizyonu Olanlar" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "BOM Geçerli" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "Kategorileri Kademele" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "Etkin ise, verilen kategorinin alt kategorilerindeki ögeleri dahil et" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Sayısal kategori ID veya 'null' sabitine göre filtrele" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "Montaj parçası etkin" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "Montaj parçası takip edilebilir" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "Montaj test edilebilir" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "Bileşen etkin" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "Bileşen takip edilebilir" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "Bileşen test edilebilir" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "Bileşen bir montaj parçası" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "Bileşen sanal" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "Stok mevcut" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "Kullanımlar" @@ -5805,7 +5817,7 @@ msgstr "Kullanımlar" msgid "Part Category" msgstr "Parça Kategorisi" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Parça Kategorileri" @@ -5837,7 +5849,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ı)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Parçalar" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Oluşturan Kullanıcı" msgid "Owner responsible for this part" msgstr "Bu parçanın sorumlu sahibi" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Birden fazla sat" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Fiyat hesaplamalarını önbelleğe almak için kullanılan para birimi" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Minimum BOM Maliyeti" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Bileşenlerin minimum maliyeti" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Maksimum BOM Maliyeti" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Bileşenlerin maksimum maliyeti" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Minimum Satın Alma Maliyeti" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Minimum tarihsel satın alma maliyeti" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Maksimum Satın Alma Maliyeti" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Maksimum tarihsel satın alma maliyeti" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Minimum Dahili Fiyat" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı minimum maliyet" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Maksimum Dahili Fiyat" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı maksimum maliyet" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Minimum Tedarikçi Fiyatı" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Parça için minimum dış tedarikçi fiyatı" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Maksimum Tedarikçi Fiyatı" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Parça için maksimum dış tedarikçi fiyatı" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Minimum Varyant Maliyeti" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Varyant parçaların hesaplanan minimum maliyeti" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Maksimum Varyant Maliyeti" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Varyant parçaların hesaplanan maksimum maliyeti" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Minimum Maliyet" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Minimum maliyeti geçersiz kıl" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Maksimum Maliyet" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Maksimum maliyeti geçersiz kıl" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Hesaplanan genel minimum maliyet" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Hesaplanan genel maksimum maliyet" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Minimum Satış Fiyatı" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı minimum satış fiyatı" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Maksimum Satış Fiyatı" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı maksimum satış fiyatı" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Minimum Satış Maliyeti" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Minimum tarihsel satış fiyatı" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Maksimum Satış Maliyeti" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Maksimum tarihsel satış fiyatı" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Stok sayımı için parça" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Kalem Sayısı" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Sayım anındaki tekil stok kaydı sayısı" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Sayım anındaki toplam mevcut stok" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Tarih" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Stok sayımının yapıldığı tarih" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Minimum Stok Maliyeti" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Mevcut stokun tahmini minimum maliyeti" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Maksimum Stok Maliyeti" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Mevcut stokun tahmini maksimum maliyeti" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "Parça Satış Fiyat Kademesi" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "Parça Test Şablonu" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Geçersiz şablon adı - en az bir alfasayısal karakter içermelidir" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "Test şablonları sadece test edilebilir paçalar için oluşturulabilir" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "Aynı anahtara sahip test şablonu parça için zaten mevcut" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Test için bir ad girin" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "Test Anahtarı" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "Test için basitleştirilmiş anahtar" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Bu test için açıklama girin" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "Bu test etkinleştirildi mi?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Gerekli" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Değer Gerektirir" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Bir test sonucu eklerken bu test bir değer gerektirir mi?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Ek Gerektirir" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Bir test sonucu eklerken bu test bir dosya eki gerektirir mi?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "Bu test için geçerli seçenekler (virgül ile ayrılmış)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM kalemi değiştirilemez - montaj kilitlidir" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM kalemi değiştirilemez - varyant montajı kilitlidir" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Üst parçayı seçin" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Alt parça" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "BOM'da kullanılacak parçayı seçin" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Bu BOM kalemi için BOM miktarı" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Bu BOM kalemi isteğe bağlıdır" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Bu BOM kalemi bir sarf malzemesidir (üretim emirlerinde izlenmez)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "Hazırlık Payı" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Bir üretimdeki hazırlık kayıplarını telafi etmek için gereken ek miktar" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "Fire" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Bir üretim için tahmini fire oranı, yüzde olarak ifade edilir (0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "Kat Yuvarlama" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Gerekli üretim miktarını bu değerin en yakın katına yuvarlayın" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "BOM kalemi referansı" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "BOM kalemi notları" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Sağlama Toplamı" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "BOM satırı sağlama toplamı" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Doğrulandı" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Bu BOM kalemi doğrulandı" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Devralınır" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu BOM kalemi, varyant parçaların BOM'larından devralınmıştır" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Varyant parçaların stok kalemleri bu BOM kalemi için kullanılabilir" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "İzlenebilir parçalar için miktar tamsayı olmalıdır" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Alt parça belirtilmelidir" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "BOM Kalemi Muadili" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Muadil parça ile asıl parça aynı olamaz" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Üst BOM kalemi" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Muadil parça" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Parça 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Parça 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "İlgili Parçayı Seçin" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "Bu ilişki için not" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Bir parça ile kendisi arasında parça ilişkisi oluşturulamaz" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "Paket Eklenti" msgid "Plugin" msgstr "Eklenti" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Yazar bulunamadı" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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" @@ -8445,7 +8457,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" @@ -8530,7 +8542,7 @@ msgstr "Simge atanmamış tüm konumlar için varsayılan simge (isteğe bağlı msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Stok Konumları" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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ı" @@ -9582,115 +9594,119 @@ msgstr "Birincil Grup" msgid "Primary group for the user" msgstr "Kullanıcının birincil grubu" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Yönetici" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Satın Alma Siparişleri" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Satış Siparişleri" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Süper Kullanıcı" -#: users/serializers.py:328 users/serializers.py:418 +#: 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:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "Bu kullanıcı hesabı aktif mi" -#: users/serializers.py:344 +#: 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:372 +#: users/serializers.py:379 msgid "Password" msgstr "Parola" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "Kullanıcının parolası" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "Uyarıları yok say" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "Şifre kuralları uyarılarını yok say" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "Kullanıcı yaratmak için yetkiniz yok" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "Kullanıcı hesabınız oluşturulmuştur." -#: users/serializers.py:484 +#: 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:490 +#: 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 57d358071c..caf2221c7d 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "Нотатки" @@ -215,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 "Електронна пошта" @@ -269,7 +269,7 @@ msgstr "" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "" msgid "Image" msgstr "Зображення" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 "" @@ -536,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 "" @@ -561,21 +561,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "Збірка" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Тестуємо" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "" @@ -783,9 +783,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "" @@ -861,16 +861,16 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "" @@ -907,120 +907,120 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Кількість" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "" msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1550,7 +1550,7 @@ msgstr "" msgid "No plugin" msgstr "" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "Користувач" msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Ціна" @@ -1652,7 +1652,7 @@ msgstr "" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "" msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "" @@ -2094,7 +2094,7 @@ msgstr "Прапорець" msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "" @@ -2106,7 +2106,7 @@ msgstr "" msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" @@ -2148,7 +2148,7 @@ msgstr "Шаблон" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Дані" @@ -2156,18 +2156,18 @@ msgstr "Дані" msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 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 "Компонент" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 -msgid "Receive error reports" +msgid "Show Subassemblies in BOM table" msgstr "" #: common/setting/user.py:256 -msgid "Receive notifications for system errors" +msgid "Enable display of subassemblies in the BOM table" msgstr "" #: common/setting/user.py:261 -msgid "Last used printing machines" +msgid "Receive error reports" msgstr "" #: common/setting/user.py:262 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/setting/user.py:267 +msgid "Last used printing machines" +msgstr "" + +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "Позиція активна" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "Позиція постачальника активна" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "Внутрішня позиція активна" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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 "Позиція виробника" @@ -4213,12 +4221,12 @@ msgstr "Обрати позицію" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "" @@ -4282,16 +4290,16 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "Базова вартість" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Внутрішній компонент" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "" @@ -5211,8 +5223,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "" @@ -5277,7 +5289,7 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5393,7 +5405,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 "" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "" @@ -5837,7 +5849,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 "" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Позиції" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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 "Мінімальний запас" @@ -6086,756 +6098,756 @@ msgstr "" msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Дата" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Тестова назва" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Позиція 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Позиція 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "" @@ -8288,7 +8300,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 "" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "" @@ -8530,7 +8542,7 @@ msgstr "" msgid "Stock Location" msgstr "" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "" @@ -8579,7 +8591,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 "" @@ -8624,7 +8636,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 "" @@ -8640,7 +8652,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 "" @@ -8753,7 +8765,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 "" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "" -#: users/ruleset.py:32 -msgid "Purchase Orders" -msgstr "" - -#: users/ruleset.py:33 -msgid "Sales Orders" +#: users/ruleset.py:30 +msgid "Bills of Material" msgstr "" #: users/ruleset.py:34 +msgid "Purchase Orders" +msgstr "" + +#: users/ruleset.py:35 +msgid "Sales Orders" +msgstr "" + +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:490 +#: 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 26a4ab41d5..449dc7a970 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:41\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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ú" @@ -215,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" @@ -269,7 +269,7 @@ 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:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,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:4182 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:3316 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 "" @@ -536,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 "" @@ -561,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:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,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 -#: 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 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "Danh mục" @@ -665,89 +665,89 @@ msgstr "" msgid "Exclude Tree" msgstr "" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 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" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "Có thể kiểm tra" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 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:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "Đã dùng" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 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" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "Tạo đơn hàng" @@ -783,9 +783,9 @@ 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:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "Địa điểm nguồn" @@ -861,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:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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" @@ -907,120 +907,120 @@ msgstr "Cấp bởi" msgid "User who issued this build order" msgstr "Người dùng người đã được phân công cho đơn đặt bản dựng này" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "Chịu trách nhiệm" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt bản dựng này" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "Liên kết bên ngoài" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "Liên kết đến URL bên ngoài" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "Độ ưu tiên" -#: build/models.py:427 +#: build/models.py:435 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 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "Mã dự án" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "Không thể dỡ bỏ tác vụ để hoàn tất phân bổ" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Đơn đặt bản dựng {build} đã được hoàn thành" -#: build/models.py:742 +#: build/models.py:750 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:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "Số sê-ri phải được cung cấp cho hàng hoá có thể theo dõi" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 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:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Tạo đầu ra {serial} chưa vượt qua tất cả các bài kiểm tra" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "Tạo mục đơn hàng" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "Dựng đối tượng" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "Số lượng" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Xây dựng mục phải xác định đầu ra, bởi vì sản phẩm chủ được đánh dấu là có thể theo dõi" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "Hàng trong kho đã chọn không phù hợp với đường BOM" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Số lượng được phân bổ ({q}) không thể vượt quá số lượng có trong kho ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "Số lượng kho hàng cần chỉ định để xây dựng" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "Kho hàng đích" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "Tạo cấp" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 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:215 build/serializers.py:970 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:219 +#: build/serializers.py:227 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:231 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:235 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:249 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:268 build/serializers.py:317 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:339 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:345 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:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 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:363 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:369 msgid "Stock location for build output" msgstr "Vị trí tồn kho cho sản phẩm" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:378 +#: build/serializers.py:386 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:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 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:494 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:493 +#: build/serializers.py:501 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:506 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:564 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:572 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:565 +#: build/serializers.py:573 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:698 msgid "Consume Allocated Stock" msgstr "Xử lý phân bổ kho hàng" -#: build/serializers.py:691 +#: build/serializers.py:699 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:705 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:706 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:733 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:726 +#: build/serializers.py:734 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:735 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:762 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:757 +#: build/serializers.py:765 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:776 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:781 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:775 +#: build/serializers.py:783 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:794 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:491 order/serializers.py:1588 +#: build/serializers.py:799 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:801 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:812 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:824 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:827 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:830 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:869 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:877 +#: build/serializers.py:885 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:916 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 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:1574 +#: build/serializers.py:993 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:999 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:1007 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:1847 +#: build/serializers.py:1031 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:1095 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:1104 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1097 +#: build/serializers.py:1105 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:1110 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1103 +#: build/serializers.py:1111 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:1116 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1109 +#: build/serializers.py:1117 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:1122 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1115 +#: build/serializers.py:1123 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:1129 msgid "All Items" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "BOM liên quan" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "ID hàng hoá BOM" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "Tên hàng hoá BOM" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "Số lượng đã phân bổ" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "Tạo liên quan" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "Tên danh mục hàng hoá" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "Có thể theo dõi" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 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:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "Kho hàng thay thế" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "Hàng tồn kho có sẵn" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "" @@ -1494,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" @@ -1518,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:735 +#: common/api.py:722 msgid "Is Link" msgstr "Đường dẫn" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "File" -#: common/api.py:790 +#: 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:803 +#: 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" @@ -1550,7 +1550,7 @@ 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" @@ -1617,7 +1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ 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:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "Giá" @@ -1652,7 +1652,7 @@ msgstr "Tên của webhook này" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Hoạt động" @@ -1849,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 "" @@ -2058,7 +2058,7 @@ msgstr "Tham số hộp kiểm tra không thể có đơn vị" 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:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" @@ -2094,7 +2094,7 @@ msgstr "Ô lựa chọn" msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "Lựa chọn" @@ -2106,7 +2106,7 @@ msgstr "Lựa chọn hợp lệ từ tham số này (ngăn cách bằng dấu ph msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "Đã bật" @@ -2126,7 +2126,7 @@ msgstr "" msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" @@ -2140,7 +2140,7 @@ msgstr "" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "Mẫu" @@ -2148,7 +2148,7 @@ msgstr "Mẫu" msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "Dữ liệu" @@ -2156,18 +2156,18 @@ msgstr "Dữ liệu" msgid "Parameter Value" msgstr "Giá trị tham số" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 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" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" @@ -2859,8 +2859,8 @@ msgstr "Sản phẩm là mẫu bởi mặc định" 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:489 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" @@ -3928,18 +3928,26 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "Nhận báo cáo lỗi" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "Nhận thông báo khi có lỗi hệ thống" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "" @@ -3988,33 +3996,33 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "" @@ -4195,7 +4203,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" @@ -4213,12 +4221,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:705 -#: 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" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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" @@ -4282,16 +4290,16 @@ msgstr "URL cho liên kết sản phẩm của nhà cung cấp bên ngoài" msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 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:846 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,7 +4315,7 @@ msgstr "Số lượng gói" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Tổng số lượng được cung cấp trong một gói đơn. Để trống cho các hàng hóa riêng lẻ." -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "nhiều" @@ -4339,14 +4347,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 "" @@ -4451,67 +4463,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 "" @@ -4821,7 +4833,7 @@ msgstr "Đặt hàng" msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "Sản phẩm nội bộ" @@ -4918,7 +4930,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "Mã đặt hàng" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "Trạng thái" @@ -5013,7 +5025,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5139,7 +5151,7 @@ msgstr "Đã nhận" msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:2008 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" @@ -5211,8 +5223,8 @@ msgstr "Kiểm tra bởi" msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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" @@ -5277,7 +5289,7 @@ msgstr "Số lượng phân bổ không thể vượt quá số lượng của k 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:2602 order/serializers.py:1568 +#: 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" @@ -5393,7 +5405,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ố" @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:492 order/serializers.py:1589 +#: 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:502 order/serializers.py:1599 +#: 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:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:736 +#: 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:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:747 +#: 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:748 +#: 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:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: 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:821 +#: 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:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:837 +#: 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:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:962 order/serializers.py:2056 +#: 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:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:988 +#: 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:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1500 +#: 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:1532 order/serializers.py:1678 +#: 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:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1710 order/serializers.py:1830 +#: 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:1713 order/serializers.py:1833 +#: 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:1768 +#: 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:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:1998 +#: 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:2008 +#: 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:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:2048 +#: 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:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" @@ -5732,71 +5744,71 @@ msgstr "" msgid "Has Results" msgstr "" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "" @@ -5805,7 +5817,7 @@ msgstr "" msgid "Part Category" msgstr "Danh mục sản phẩm" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "Danh mục sản phẩm" @@ -5837,7 +5849,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)" @@ -5858,7 +5870,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:29 msgid "Parts" msgstr "Nguyên liệu" @@ -5973,7 +5985,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 "" @@ -6006,7 +6018,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" @@ -6086,756 +6098,756 @@ msgstr "Tạo người dùng" msgid "Owner responsible for this part" msgstr "Trách nhiệm chủ sở hữu cho sản phẩm này" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "Tiền được dùng để làm đệm tính toán giá bán" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "Chi phí thành phần sản phẩm tối đa trong lịch sử" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "Chi phí tối thiểu dựa trên phá vỡ giá nội bộ" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "Chi phí tối đa dựa trên phá vỡ giá nội bộ" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "Giá sản phẩm tối thiểu từ nhà cung ứng bên ngoài" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "Giá sản phẩm tối đã từ nhà cung ứng bên ngoài" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "Chi phí tối thiểu của sản phẩm biến thể đã tính" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "Chi phí tối đa của sản phẩm biến thể đã tính" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "Giá bán tối thiểu dựa trên phá giá" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "Số mục kho độc lậo tại thời điểm kiểm kê" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "Tống số kho tại thời điểm kiểm kê" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "Ngày" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "Chi phí kho tối thiểu ước tính của kho đang có" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "Chi phí kho tối đa ước tính của kho đang có" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "Kiểm thử này yêu cầu 1 giá trị khi thêm một kết quả kiểm thử?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "Kiểm thử này yêu cầu tệp đính kèm khi thêm một kết quả kiểm thử?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Mục BOM này bị tiêu hao (không được theo dõi trong đơn đặt bản dựng)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Mục BOM này được thừa kế bởi BOM cho sản phẩm biến thể" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Hàng trong kho cho sản phẩm biến thể có thể được dùng bởi mục BOM này" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Số lượng phải là giá trị nguyên dùng cho sản phẩm có thể theo dõi được" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "Sản phẩm thay thế không thể giống sản phẩm chủ đạo" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "Không thể tạo mối quan hệ giữa một sản phẩm và chính nó" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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" @@ -7758,7 +7770,7 @@ msgstr "" msgid "Plugin" msgstr "Phần bổ sung" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "Không tìm thấy tác giả" @@ -8288,7 +8300,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" @@ -8361,7 +8373,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 "" @@ -8445,7 +8457,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 "Ế" @@ -8530,7 +8542,7 @@ msgstr "Biểu tượng mặc định cho vị trí không được đặt biể msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "Vị trí kho hàng" @@ -8579,7 +8591,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" @@ -8624,7 +8636,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" @@ -8640,7 +8652,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" @@ -8753,7 +8765,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" @@ -8877,7 +8889,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 "" @@ -8901,222 +8913,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 "" @@ -9582,115 +9594,119 @@ msgstr "" msgid "Primary group for the user" msgstr "" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "Quản trị" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "Đơn mua hàng" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "Đơn hàng bán" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:328 users/serializers.py:418 +#: 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:332 users/serializers.py:425 +#: 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:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:482 +#: 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:484 +#: 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:490 +#: 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 3e427cd149..dc7b7d99db 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "备注" @@ -215,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 "电子邮件" @@ -269,7 +269,7 @@ msgstr "无效选项" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "服务器记录了一个错误。" msgid "Image" msgstr "图像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 类" @@ -536,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有可用更新" @@ -561,21 +561,21 @@ msgstr "订单状态" msgid "Parent Build" msgstr "父级生产订单" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "类别" @@ -665,89 +665,89 @@ msgstr "最大日期" msgid "Exclude Tree" msgstr "排除树" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "可选项" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "装配件" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "可追溯" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "需检测" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "未结算订单" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "已消耗" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "已订购" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" msgstr "未找到版本" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "产出" -#: build/api.py:969 +#: build/api.py:983 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "按产出库存项ID筛选,使用“null”查找未安装的生产项。" -#: build/models.py:121 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "生产订单" @@ -783,9 +783,9 @@ msgstr "目标日期必须在开始日期之后" msgid "Build Order Reference" msgstr "生产订单编号" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -813,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:1093 msgid "Source Location" msgstr "源库位" @@ -861,16 +861,16 @@ msgstr "生产状态" msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "建立日期" @@ -907,120 +907,120 @@ msgstr "发起人" msgid "User who issued this build order" msgstr "创建该生产订单的用户" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "责任方" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "该生产订单的责任人或责任团队" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "外部链接" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "指向外部资源的URL链接" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "生产优先级" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "此生产订单的优先级" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "项目编号" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "该生产订单归属的项目编号" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "无法完成生产订单,存在未关闭的子生产订单" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "无法完成生产订单,存在未完成的产出项" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "生产分配任务卸载失败" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生产订单 {build} 已完成" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "可追溯零件必须填写序列号" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "未指定产出" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "产出已完成" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "数量不能大于产出数量" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "产出未通过所有必要测试" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "产出 {serial} 未通过所有必要测试" -#: build/models.py:1203 +#: build/models.py:1211 msgid "Allocated stock items are still in production" msgstr "已分配的库存物料仍在生产中" -#: build/models.py:1211 +#: build/models.py:1219 msgid "Cannot partially complete a build output with allocated items" msgstr "存在已分配物料时无法部分完成生产输出" -#: build/models.py:1740 +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "生产订单行项目" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "生产对象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "数量" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "生产订单所需数量" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "库存消耗量" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "所选库存项与物料清单行项不匹配" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "序列化物料的数量必须为1" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "库存项" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "分配给该生产任务的库存量" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "安裝到" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "生产等级" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "零件名称" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "产出" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "生产产出与上级订单不匹配" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "产出零件与生产订单零件不匹配" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "此产出已经完成" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "此产出尚未完全分配" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "输入产出数量" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "可追踪的零件数量必须为整数" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "输入产出的序列号" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "生产产出的库存地点" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "必须提供产出清单" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "报废品库存地点" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "放弃分配" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消对报废产品的库存分配" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "废品产出的原因" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "完工产出存放库位" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未全部分配,则完成产出" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "消耗已分配库存" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "立即扣除已分配给该生产任务的库存" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的产出" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "禁止操作" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "标记为当前生产订单消耗" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "完成此生产订单前取消分配" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "超额分配库存" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何处理分配给生产订单的超额库存" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "存在超额分配的库存项" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完全分配至生产订单" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "必需库存未完成全量分配" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "接受未完工" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "允许所需数量的产出未完成" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "生产需求数量未完成" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "生产订单有打开的子生产订单" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "生产订单必须处于生产状态" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "生产行" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "产出" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "生产行项目" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的零件的分配,必须指定生产产出" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的零件,无法指定生产产出" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "必须提供分配项目" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件来源的库存地点(留空则可来源于任何库存地点)" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "从该选定的库存地点排除库存项" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "可互换库存" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多个位置的库存项目可以互换使用" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "替代品库存" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的零件" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "分配可选的物料清单给生产订单" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "所有物料" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" msgstr "未跟踪的物品" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" msgstr "已跟踪的物品" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "物品类型" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" msgstr "选择要自动分配的条目类型" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "物料清单参考" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "物料清单零件识别号码" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "物料清单零件名称" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "安裝到" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "已分配数量" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "生产订单编号" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "零件类别名称" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "可追踪" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "物料清单项" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "可用库存" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "可用的替代品库存" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "可用的变体库存" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗数量超过分配数量" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "库存消耗可选备注" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "生产物料项必须关联到正确的生产订单" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "重复的生产物料项分配" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "订单行项目必须关联到正确的生产订单" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "重复的订单行项目分配" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "必须提供至少一个物料项或行项目" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "逾期的生产订单" msgid "Build order {bo} is now overdue" msgstr "生产订单 {bo} 现已逾期" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "是否链接" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "是否为文件" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "用户没有权限删除此附件" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "用户没有权限删除此附件" @@ -1550,7 +1550,7 @@ msgstr "未提供有效的货币代码" msgid "No plugin" msgstr "暂无插件" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "项目编号标签" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批发价数量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "价格" @@ -1652,7 +1652,7 @@ msgstr "此网络钩子的名称" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" @@ -1849,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 "为附件指定的模型类型无效" @@ -2058,7 +2058,7 @@ msgstr "勾选框参数不能有单位" msgid "Checkbox parameters cannot have choices" msgstr "复选框参数不能有选项" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "选择必须是唯一的" @@ -2094,7 +2094,7 @@ msgstr "勾选框" msgid "Is this parameter a checkbox?" msgstr "此参数是否为勾选框?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "选项" @@ -2106,7 +2106,7 @@ msgstr "此参数的有效选择 (逗号分隔)" msgid "Selection list for this parameter" msgstr "此参数的选择列表" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "已启用" @@ -2126,7 +2126,7 @@ msgstr "参数" msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "为附件指定的模型类型无效" @@ -2140,7 +2140,7 @@ msgstr "此参数的目标模型的 ID" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "模板" @@ -2148,7 +2148,7 @@ msgstr "模板" msgid "Parameter template" msgstr "参数模板" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "数据" @@ -2156,18 +2156,18 @@ msgstr "数据" msgid "Parameter Value" msgstr "参数值" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "可选注释字段" @@ -2391,85 +2391,85 @@ 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 +#: 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 "选择列表已锁定" @@ -2859,8 +2859,8 @@ msgstr "零件默认为模板" msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:489 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 "组件" @@ -3930,18 +3930,26 @@ msgstr "禁用时:完整分类路径以悬停提示框形式显示。\n" "启用时:完整分类路径以纯文本形式显示。" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "接收错误报告" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "接收系统错误通知" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "上次使用的打印设备" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "为用户保存上次使用的打印设备" @@ -3990,33 +3998,33 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "制造商处于活动状态" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "供应商零件处于激活状态" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" msgstr "主供应商部件" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "内部零件已激活" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "供应商已激活" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "有库存" @@ -4197,7 +4205,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 "制造商零件" @@ -4215,12 +4223,12 @@ msgstr "选择零件" msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "制造商零件编号" @@ -4244,8 +4252,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:666 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 @@ -4256,7 +4264,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 "供应商库存管理单位" @@ -4284,16 +4292,16 @@ msgstr "外部供应商零件链接的URL" msgid "Supplier part description" msgstr "供应商零件说明" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "基本费用" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" -#: company/models.py:843 order/serializers.py:846 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,7 +4317,7 @@ msgstr "包装数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "单包供应的总数量。为单个项目留空。" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "多个" @@ -4341,14 +4349,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 "数据导出过程中发生错误" @@ -4453,67 +4465,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格式无效" @@ -4823,7 +4835,7 @@ msgstr "订单" msgid "Order Complete" msgstr "订单完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "内部零件" @@ -4920,7 +4932,7 @@ msgstr "开始日期" msgid "Scheduled start date for this order" msgstr "本订单的预定开始日期" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "预计日期" @@ -4958,7 +4970,7 @@ msgid "Order reference" msgstr "订单参考" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "狀態" @@ -5015,7 +5027,7 @@ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "序列号不能分配给虚拟件" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5141,7 +5153,7 @@ msgstr "已接收" msgid "Number of items received" msgstr "收到的物品数量" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "采购价格" @@ -5213,8 +5225,8 @@ msgstr "审核人" msgid "User who checked this shipment" msgstr "检查此装运的用户" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "配送" @@ -5279,7 +5291,7 @@ msgstr "分配数量不能超过库存数量" msgid "Allocation quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化库存项目的数量必须为1" @@ -5395,7 +5407,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 "复制参数" @@ -5414,216 +5426,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "供应商名称" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "订单不能取消" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "允许关闭行项目不完整的订单" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "订单中的行项目不完整" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "订单未打开" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自动定价" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根据供应商零件数据自动计算采购价格" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "购买价格货币" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "合并项目" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "内部零件名称" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "必须指定供应商零件" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "必须指定采购订单" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "供应商必须匹配采购订单" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "采购订单必须与供应商匹配" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "行项目" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "为收到的物品选择目的地位置" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "输入入库项目的批号" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "输入入库库存项的有效期" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "输入入库库存项目的序列号" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "覆盖传入库存项目的包装资料" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "传入库存项目的附加说明" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "条形码已被使用" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "必须提供行项目" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "必须指定目标位置" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "提供的条形码值必须是唯一的" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "配送" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" msgstr "已分配的行" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "售出价格货币" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "已分配的项目" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "未提供装运详细信息" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "行项目与此订单不关联" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "数量必须为正" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "输入要分配的序列号" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "货物已发出" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "发货与此订单无关" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "未找到以下序列号的匹配项" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下序列号不可用" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "退货订单行项目" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "行项目与退货订单不匹配" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "行项目已收到" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "只能根据正在进行的订单接收物品" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "退货数量" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "行价格货币" @@ -5734,71 +5746,71 @@ msgstr "排除指定类别下的子类别" msgid "Has Results" msgstr "有结果" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "是变体" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "是修订版本" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "有修订版本" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "物料清单合规" -#: part/api.py:961 +#: part/api.py:962 msgid "Cascade Categories" msgstr "级联分类" -#: part/api.py:962 +#: part/api.py:963 msgid "If true, include items in child categories of the given category" msgstr "如果为真,则包含给定分类下的所有子分类中的项目" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" msgstr "按数字分类ID或字面值 \"null\" 进行筛选" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" msgstr "装配零件已启用" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" msgstr "装配零件可追踪" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "装配部份是可测试的" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" msgstr "元器件已激活" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" msgstr "该零部件可追溯" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "组件部份是可测试的" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" msgstr "该零部件是一个装配件" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" msgstr "该零部件为虚拟件" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" msgstr "有可用库存" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "使用" @@ -5807,7 +5819,7 @@ msgstr "使用" msgid "Part Category" msgstr "零件类别" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "零件类别" @@ -5839,7 +5851,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 "图标(可选)" @@ -5860,7 +5872,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:29 msgid "Parts" msgstr "零件" @@ -5975,7 +5987,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" @@ -6008,7 +6020,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 "最低库存" @@ -6088,756 +6100,756 @@ msgstr "新建用户" msgid "Owner responsible for this part" msgstr "此零件的负责人" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "出售多个" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "用于缓存定价计算的货币" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "最低物料清单成本" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "物料清单的最高成本" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "最低购买成本" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "最大购买成本" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "最低内部价格" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "基于内部批发价的最低成本" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "最大内部价格" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "基于内部批发价的最高成本" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "供应商最低价格" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "外部供应商零件的最低价格" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "供应商最高价格" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "来自外部供应商的商零件的最高价格" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "最小变体成本" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "计算出的变体零件的最低成本" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "最大变体成本" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "计算出的变体零件的最大成本" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "覆盖最低成本" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "覆盖最大成本" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "计算总最低成本" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "计算总最大成本" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "最低售出价格" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "基于批发价的最低售出价格" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "最高售出价格" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "基于批发价的最大售出价格" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "最低销售成本" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "历史最低售出价格" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "最高销售成本" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "历史最高售出价格" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "用于盘点的零件" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "物品数量" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "盘点时的个别库存条目数" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "盘点时可用库存总额" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "日期" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "进行盘点的日期" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "最低库存成本" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "现有存库存最低成本估算" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "最高库存成本" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "目前库存最高成本估算" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "零件售出价格折扣" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "零件测试模板" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名称无效 - 必须包含至少一个字母或者数字" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "测试模板只能为可拆分的部件创建" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主键的测试模板" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "测试名" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "输入测试的名称" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "测试主键" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "简化测试主键" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "测试说明" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "输入测试的描述" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "此测试是否已启用?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "必须的" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "需要此测试才能通过吗?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "添加测试结果时是否需要一个值?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加测试结果时是否需要文件附件?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "此测试的有效选择 (逗号分隔)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清单项目不能被修改 - 装配已锁定" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清单项目不能修改 - 变体装配已锁定" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "选择父零件" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "子零件" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "选择要用于物料清单的零件" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "此物料清单项目的数量" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "此物料清单项目是可选的" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "设置数量" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "为补偿生产准备损耗所需的额外数量" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "损耗" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "生产预估损耗率(百分比,0-100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "舍入倍数" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "将所需生产数量向上舍入至该值的最接近倍数" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "物料清单项目引用" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "物料清单项目注释" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "校验和" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "物料清单行校验和" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "已验证" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "此物料清单项目已验证" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "获取继承的" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清单项目是由物料清单继承的变体零件" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "变体零件的库存项可以用于此物料清单项目" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追踪零件的数量必须是整数" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "必须指定子零件" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "物料清单项目替代品" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能与主零件相同" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "上级物料清单项目" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "零件2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "选择相关的零件" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "此关系的注释" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "零件关系不能在零件和自身之间创建" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "复制物料清单项目时复制替代品零件" @@ -7760,7 +7772,7 @@ msgstr "软件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "未找到作者" @@ -8290,7 +8302,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 "已安装的项目" @@ -8363,7 +8375,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 "上级地点" @@ -8447,7 +8459,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 "过期" @@ -8532,7 +8544,7 @@ msgstr "为所有没有图标的位置设置默认图标(可选)" msgid "Stock Location" msgstr "库存地点" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "库存地点" @@ -8581,7 +8593,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 "无法为虚拟零件创建库存项" @@ -8626,7 +8638,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 "包装此库存物品存储在" @@ -8642,7 +8654,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 "此库存项的批号" @@ -8755,7 +8767,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 "复制库存项" @@ -8879,7 +8891,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 "此结果的测试模板" @@ -8903,222 +8915,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 "上一个序列号" @@ -9584,115 +9596,119 @@ msgstr "主组" msgid "Primary group for the user" msgstr "用户主组" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "管理员" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "采购订单" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "销售订单" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" msgstr "用户必须经过身份验证" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" msgstr "只有超级用户可以为另一个用户创建令牌" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" msgstr "管理员" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" msgstr "该用户是否拥有管理员权限" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "超级用户" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "此用户是否为超级用户" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "此用户帐户是否已激活" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "只有超级用户可以调整此字段" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "密码" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "用户密码" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "覆盖警告" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "覆盖有关密码规则的警告" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" msgstr "管理员" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" msgstr "该用户是否拥有管理员权限" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "你没有权限创建用户" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "您的账户已创建。" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "请使用密码重置功能登录" -#: users/serializers.py:490 +#: 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 cc556a25be..e3abf65820 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-11 07:38+0000\n" -"PO-Revision-Date: 2026-04-11 07:40\n" +"POT-Creation-Date: 2026-04-28 02:31+0000\n" +"PO-Revision-Date: 2026-04-28 02:34\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\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" @@ -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 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: build/serializers.py:576 build/serializers.py:1789 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 "備註" @@ -165,19 +165,19 @@ msgstr "資料包含被禁止的 Markdown 內容" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "無效的 URL:沒有主機名稱" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "無效的 URL:無法解析主機名稱" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL 指向私有或保留的 IP 地址" #: InvenTree/helpers_model.py:195 msgid "Too many redirects" -msgstr "" +msgstr "重新導向次數過多" #: InvenTree/helpers_model.py:200 msgid "Connection error" @@ -215,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 "電子郵件" @@ -269,7 +269,7 @@ msgstr "無效的選項" #: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 #: common/models.py:2126 common/models.py:2251 common/models.py:2548 -#: common/serializers.py:638 generic/states/serializers.py:20 +#: common/serializers.py:647 generic/states/serializers.py:20 #: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" @@ -336,51 +336,51 @@ msgstr "伺服器紀錄了一個錯誤。" msgid "Image" msgstr "圖像" -#: InvenTree/serializers.py:324 part/models.py:4168 +#: InvenTree/serializers.py:361 part/models.py:4182 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:3316 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 類別不符" @@ -536,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 更新可用" @@ -561,21 +561,21 @@ msgstr "訂單狀態" msgid "Parent Build" msgstr "上層生產工單" -#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: build/api.py:85 build/api.py:918 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 +#: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 +#: build/serializers.py:1214 build/serializers.py:1390 +#: build/serializers.py:1483 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 +#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 +#: part/models.py:527 part/models.py:3327 part/models.py:3470 +#: part/models.py:3528 part/models.py:3549 part/models.py:3571 +#: part/models.py:3712 part/models.py:3977 part/models.py:4398 +#: 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 @@ -585,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 @@ -595,9 +595,9 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 -#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 -#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 +#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 +#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 msgid "Category" msgstr "類別" @@ -665,89 +665,89 @@ msgstr "最大日期" msgid "Exclude Tree" msgstr "排除樹" -#: build/api.py:400 +#: build/api.py:414 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:458 build/serializers.py:1424 part/models.py:4011 msgid "Consumable" msgstr "耗材" -#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 msgid "Optional" msgstr "非必須項目" -#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 +#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 #: stock/api.py:638 msgid "Assembly" msgstr "裝配" -#: build/api.py:453 +#: build/api.py:467 msgid "Tracked" msgstr "追蹤中" -#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 msgid "Testable" msgstr "可測試" -#: build/api.py:466 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "訂單未完成" -#: build/api.py:476 build/serializers.py:1502 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 +#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 msgid "Consumed" msgstr "已消耗" -#: build/api.py:494 company/models.py:882 company/serializers.py:414 +#: build/api.py:508 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:1284 part/serializers.py:849 part/serializers.py:1170 -#: part/serializers.py:1751 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:421 +#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 +#: part/serializers.py:1792 msgid "On Order" msgstr "已訂購" -#: build/api.py:671 +#: build/api.py:685 msgid "Build not found" -msgstr "" +msgstr "找不到生產記錄" -#: build/api.py:941 build/models.py:120 order/models.py:2024 +#: build/api.py:955 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:1245 order/api.py:1250 -#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 -#: 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:969 build/api.py:973 build/serializers.py:368 +#: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 +#: build/serializers.py:1270 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:981 part/serializers.py:1381 msgid "Output" msgstr "產出" -#: build/api.py:969 +#: build/api.py:983 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 +#: build/models.py:121 users/ruleset.py:33 msgid "Build Orders" msgstr "生產工單" @@ -783,9 +783,9 @@ msgstr "目標日期必須晚於開始日期" msgid "Build Order Reference" msgstr "生產工單代號" -#: build/models.py:259 build/serializers.py:1403 order/models.py:641 +#: build/models.py:259 build/serializers.py:1421 order/models.py:641 #: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4039 +#: part/models.py:4051 #: 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 @@ -799,7 +799,7 @@ 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" @@ -811,9 +811,9 @@ 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:1093 msgid "Source Location" msgstr "來源倉儲地點" @@ -861,16 +861,16 @@ msgstr "生產狀態" msgid "Build status code" msgstr "生產狀態代碼" -#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 +#: build/models.py:356 build/serializers.py:355 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:356 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 "建立日期" @@ -907,120 +907,120 @@ msgstr "發布者" msgid "User who issued this build order" msgstr "發布此生產工單的使用者" -#: build/models.py:411 common/models.py:187 order/api.py:182 +#: build/models.py:419 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 "負責人" -#: build/models.py:412 +#: build/models.py:420 msgid "User or group responsible for this build order" msgstr "負責此生產工單的使用者或羣組" -#: build/models.py:417 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1100 msgid "External Link" msgstr "外部連結" -#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: build/models.py:427 common/models.py:2014 part/models.py:1176 #: stock/models.py:1102 msgid "Link to external URL" msgstr "外部URL連結" -#: build/models.py:424 +#: build/models.py:432 msgid "Build Priority" msgstr "製造優先度" -#: build/models.py:427 +#: build/models.py:435 msgid "Priority of this build order" msgstr "此生產工單的優先程度" -#: build/models.py:435 common/models.py:157 common/models.py:171 +#: build/models.py:443 common/models.py:157 common/models.py:171 #: order/api.py:168 order/models.py:456 order/models.py:1853 msgid "Project Code" msgstr "專案代碼" -#: build/models.py:436 +#: build/models.py:444 msgid "Project code for this build order" msgstr "此生產工單隸屬的專案代碼" -#: build/models.py:689 +#: build/models.py:697 msgid "Cannot complete build order with open child builds" msgstr "無法完成仍有未結束子工單的生產工單" -#: build/models.py:694 +#: build/models.py:702 msgid "Cannot complete build order with incomplete outputs" msgstr "無法完成有未完成產出的生產工單" -#: build/models.py:713 build/models.py:843 +#: build/models.py:721 build/models.py:851 msgid "Failed to offload task to complete build allocations" msgstr "未能卸載任務以完成生產分配" -#: build/models.py:736 +#: build/models.py:744 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生產工單 {build} 已經完成" -#: build/models.py:742 +#: build/models.py:750 msgid "A build order has been completed" msgstr "一張生產工單已經完成" -#: build/models.py:924 build/serializers.py:395 +#: build/models.py:932 build/serializers.py:403 msgid "Serial numbers must be provided for trackable parts" msgstr "對於可跟蹤的零件,必須提供序列號" -#: build/models.py:1016 build/models.py:1103 +#: build/models.py:1024 build/models.py:1111 msgid "No build output specified" msgstr "未指定產出" -#: build/models.py:1019 +#: build/models.py:1027 msgid "Build output is already completed" msgstr "產出已完成" -#: build/models.py:1022 +#: build/models.py:1030 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:744 order/serializers.py:615 order/serializers.py:815 -#: 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 +#: 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:1122 build/models.py:1229 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於輸出數量" -#: build/models.py:1189 build/serializers.py:594 +#: build/models.py:1197 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "此產出尚未通過所有必要測試" -#: build/models.py:1192 build/serializers.py:589 +#: build/models.py:1200 build/serializers.py:597 #, 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 "" - #: build/models.py:1211 -msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgid "Allocated stock items are still in production" +msgstr "已分配的庫存項目仍在生產中" -#: build/models.py:1740 +#: build/models.py:1219 +msgid "Cannot partially complete a build output with allocated items" +msgstr "無法部分完成具有已分配項目的生產產出" + +#: build/models.py:1748 msgid "Build Order Line Item" msgstr "生產訂單行項目" -#: build/models.py:1765 +#: build/models.py:1773 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:1795 order/models.py:2647 order/serializers.py:1683 -#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 +#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 +#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 +#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 #: 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 @@ -1032,445 +1032,445 @@ msgstr "生產對象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py: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" msgstr "數量" -#: build/models.py:1778 +#: build/models.py:1786 msgid "Required quantity for build order" msgstr "生產工單所需數量" -#: build/models.py:1787 +#: build/models.py:1795 msgid "Quantity of consumed stock" msgstr "已消耗庫存數量" -#: build/models.py:1888 +#: build/models.py:1896 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生產項必須指定產出,因為主零件已經被標記為可追蹤的" -#: build/models.py:1951 +#: build/models.py:1959 msgid "Selected stock item does not match BOM line" msgstr "選擇的庫存品項和BOM的項目不符" -#: build/models.py:1970 +#: build/models.py:1978 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "分配數量必須大於零" -#: build/models.py:1976 +#: build/models.py:1984 msgid "Quantity must be 1 for serialized stock" msgstr "有序號的品項數量必須為1" -#: build/models.py:1986 +#: build/models.py:1994 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配的數量({q})不能超過可用的庫存數量({a})" -#: build/models.py:2003 order/models.py:2596 +#: build/models.py:2011 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:1520 order/serializers.py:1541 +#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 +#: 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 "庫存品項" -#: build/models.py:2093 +#: build/models.py:2101 msgid "Source stock item" msgstr "來源庫存項目" -#: build/models.py:2103 +#: build/models.py:2111 msgid "Stock quantity to allocate to build" msgstr "要分配的庫存數量" -#: build/models.py:2112 +#: build/models.py:2120 msgid "Install into" msgstr "安裝到" -#: build/models.py:2113 +#: build/models.py:2121 msgid "Destination stock item" msgstr "目的庫存品項" -#: build/serializers.py:115 +#: build/serializers.py:116 msgid "Build Level" msgstr "構建等級" -#: build/serializers.py:128 part/serializers.py:1256 +#: build/serializers.py:130 part/serializers.py:1283 msgid "Part Name" msgstr "零件名稱" -#: build/serializers.py:207 build/serializers.py:962 +#: build/serializers.py:215 build/serializers.py:970 msgid "Build Output" msgstr "產出" -#: build/serializers.py:219 +#: build/serializers.py:227 msgid "Build output does not match the parent build" msgstr "產出與之前的生產不匹配" -#: build/serializers.py:223 +#: build/serializers.py:231 msgid "Output part does not match BuildOrder part" msgstr "產出零件與生產訂單零件不匹配" -#: build/serializers.py:227 +#: build/serializers.py:235 msgid "This build output has already been completed" msgstr "此產出已經完成" -#: build/serializers.py:241 +#: build/serializers.py:249 msgid "This build output is not fully allocated" msgstr "此產出尚未完全分配" -#: build/serializers.py:260 build/serializers.py:309 +#: build/serializers.py:268 build/serializers.py:317 msgid "Enter quantity for build output" msgstr "輸入產出數量" -#: build/serializers.py:331 +#: build/serializers.py:339 msgid "Integer quantity required for trackable parts" msgstr "可追蹤的零件數量必須為整數" -#: build/serializers.py:337 +#: build/serializers.py:345 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" -#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 -#: stock/serializers.py:714 +#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序號" -#: build/serializers.py:355 +#: build/serializers.py:363 msgid "Enter serial numbers for build outputs" msgstr "輸出產出的序列號" -#: build/serializers.py:361 +#: build/serializers.py:369 msgid "Stock location for build output" msgstr "生產輸出的庫存地點" -#: build/serializers.py:376 +#: build/serializers.py:384 msgid "Auto Allocate Serial Numbers" msgstr "自動分配序號" -#: build/serializers.py:378 +#: build/serializers.py:386 msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: build/serializers.py:419 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:461 build/serializers.py:517 build/serializers.py:609 msgid "A list of build outputs must be provided" msgstr "必須提供產出清單" -#: build/serializers.py:486 +#: build/serializers.py:494 msgid "Stock location for scrapped outputs" msgstr "廢品產出的庫存位置" -#: build/serializers.py:492 +#: build/serializers.py:500 msgid "Discard Allocations" msgstr "放棄分配" -#: build/serializers.py:493 +#: build/serializers.py:501 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消對廢品產出的任何庫存分配" -#: build/serializers.py:498 +#: build/serializers.py:506 msgid "Reason for scrapping build output(s)" msgstr "廢品產出的原因" -#: build/serializers.py:556 +#: build/serializers.py:564 msgid "Location for completed build outputs" msgstr "已完成刪除的庫存地點" -#: build/serializers.py:564 +#: build/serializers.py:572 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:565 +#: build/serializers.py:573 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果庫存尚未全部分配,則完成產出" -#: build/serializers.py:690 +#: build/serializers.py:698 msgid "Consume Allocated Stock" msgstr "消費已分配的庫存" -#: build/serializers.py:691 +#: build/serializers.py:699 msgid "Consume any stock which has already been allocated to this build" msgstr "消耗已分配給此生產的任何庫存" -#: build/serializers.py:697 +#: build/serializers.py:705 msgid "Remove Incomplete Outputs" msgstr "移除未完成的產出" -#: build/serializers.py:698 +#: build/serializers.py:706 msgid "Delete any build outputs which have not been completed" msgstr "刪除所有未完成的產出" -#: build/serializers.py:725 +#: build/serializers.py:733 msgid "Not permitted" msgstr "不允許" -#: build/serializers.py:726 +#: build/serializers.py:734 msgid "Accept as consumed by this build order" msgstr "接受作為此生產訂單的消費" -#: build/serializers.py:727 +#: build/serializers.py:735 msgid "Deallocate before completing this build order" msgstr "完成此生產訂單前取消分配" -#: build/serializers.py:754 +#: build/serializers.py:762 msgid "Overallocated Stock" msgstr "超出分配的庫存" -#: build/serializers.py:757 +#: build/serializers.py:765 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何處理分配給生產訂單的額外庫存項" -#: build/serializers.py:768 +#: build/serializers.py:776 msgid "Some stock items have been overallocated" msgstr "有庫存項目已被過度分配" -#: build/serializers.py:773 +#: build/serializers.py:781 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:775 +#: build/serializers.py:783 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受庫存項未被完全分配至生產訂單" -#: build/serializers.py:786 +#: build/serializers.py:794 msgid "Required stock has not been fully allocated" msgstr "所需庫存尚未完全分配" -#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 +#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 msgid "Accept Incomplete" msgstr "接受不完整" -#: build/serializers.py:793 +#: build/serializers.py:801 msgid "Accept that the required number of build outputs have not been completed" msgstr "允許所需數量的產出未完成" -#: build/serializers.py:804 +#: build/serializers.py:812 msgid "Required build quantity has not been completed" msgstr "未完成所需生產數量" -#: build/serializers.py:816 +#: build/serializers.py:824 msgid "Build order has open child build orders" msgstr "生產訂單有打開的子生產訂單" -#: build/serializers.py:819 +#: build/serializers.py:827 msgid "Build order must be in production state" msgstr "生產訂單必須處於生產狀態" -#: build/serializers.py:822 +#: build/serializers.py:830 msgid "Build order has incomplete outputs" msgstr "生產訂單有未完成的產出" -#: build/serializers.py:861 +#: build/serializers.py:869 msgid "Build Line" msgstr "生產行" -#: build/serializers.py:869 +#: build/serializers.py:877 msgid "Build output" msgstr "產出" -#: build/serializers.py:877 +#: build/serializers.py:885 msgid "Build output must point to the same build" msgstr "生產產出必須指向相同的生產" -#: build/serializers.py:908 +#: build/serializers.py:916 msgid "Build Line Item" msgstr "生產行項目" -#: build/serializers.py:926 +#: build/serializers.py:934 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:950 stock/serializers.py:1362 msgid "Item must be in stock" msgstr "商品必須有庫存" -#: build/serializers.py:985 order/serializers.py:1574 +#: build/serializers.py:993 order/serializers.py:1674 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:991 +#: build/serializers.py:999 msgid "Build output must be specified for allocation of tracked parts" msgstr "對於被追蹤的零件的分配,必須指定生產產出" -#: build/serializers.py:999 +#: build/serializers.py:1007 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "對於未被追蹤的零件,無法指定生產產出" -#: build/serializers.py:1023 order/serializers.py:1847 +#: build/serializers.py:1031 order/serializers.py:1947 msgid "Allocation items must be provided" msgstr "必須提供分配項目" -#: build/serializers.py:1087 +#: build/serializers.py:1095 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件來源的庫存地點(留空則可來源於任何庫存地點)" -#: build/serializers.py:1096 +#: build/serializers.py:1104 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1097 +#: build/serializers.py:1105 msgid "Exclude stock items from this selected location" msgstr "從該選定的庫存地點排除庫存項" -#: build/serializers.py:1102 +#: build/serializers.py:1110 msgid "Interchangeable Stock" msgstr "可互換庫存" -#: build/serializers.py:1103 +#: build/serializers.py:1111 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多個位置的庫存項目可以互換使用" -#: build/serializers.py:1108 +#: build/serializers.py:1116 msgid "Substitute Stock" msgstr "替代品庫存" -#: build/serializers.py:1109 +#: build/serializers.py:1117 msgid "Allow allocation of substitute parts" msgstr "允許分配可替換的零件" -#: build/serializers.py:1114 +#: build/serializers.py:1122 msgid "Optional Items" msgstr "可選項目" -#: build/serializers.py:1115 +#: build/serializers.py:1123 msgid "Allocate optional BOM items to build order" msgstr "分配可選的物料清單給生產訂單" -#: build/serializers.py:1121 +#: build/serializers.py:1129 msgid "All Items" msgstr "全部品項" -#: build/serializers.py:1122 +#: build/serializers.py:1130 msgid "Untracked Items" -msgstr "" +msgstr "未追蹤項目" -#: build/serializers.py:1123 +#: build/serializers.py:1131 msgid "Tracked Items" -msgstr "" +msgstr "已追蹤項目" -#: build/serializers.py:1125 +#: build/serializers.py:1133 msgid "Item Type" msgstr "品項類型" -#: build/serializers.py:1126 +#: build/serializers.py:1134 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "選擇要自動分配的項目類型" -#: build/serializers.py:1180 +#: build/serializers.py:1188 msgid "BOM Reference" msgstr "物料清單參考" -#: build/serializers.py:1186 +#: build/serializers.py:1194 msgid "BOM Part ID" msgstr "物料清單零件識別號碼" -#: build/serializers.py:1193 +#: build/serializers.py:1201 msgid "BOM Part Name" msgstr "物料清單零件名稱" -#: build/serializers.py:1242 +#: build/serializers.py:1253 msgid "Install Into" msgstr "安裝至" -#: build/serializers.py:1269 build/serializers.py:1487 +#: build/serializers.py:1282 build/serializers.py:1511 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:607 -#: stock/models.py:1043 stock/serializers.py:582 +#: build/serializers.py:1302 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:1318 stock/serializers.py:649 msgid "Allocated Quantity" msgstr "已分配數量" -#: build/serializers.py:1371 +#: build/serializers.py:1385 msgid "Build Reference" msgstr "構建參考" -#: build/serializers.py:1381 +#: build/serializers.py:1395 msgid "Part Category Name" msgstr "零件類別名稱" -#: build/serializers.py:1415 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 msgid "Trackable" msgstr "可追蹤" -#: build/serializers.py:1418 +#: build/serializers.py:1436 msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1421 part/models.py:4072 +#: build/serializers.py:1439 part/models.py:4084 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 -#: part/models.py:4376 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 +#: part/models.py:4390 stock/api.py:881 msgid "BOM Item" msgstr "物料清單項" -#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 -#: part/serializers.py:1755 +#: build/serializers.py:1529 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:1531 part/serializers.py:852 part/serializers.py:1205 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1510 part/serializers.py:873 +#: build/serializers.py:1534 part/serializers.py:885 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 +#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 msgid "Available Stock" msgstr "可用庫存" -#: build/serializers.py:1513 +#: build/serializers.py:1537 msgid "Available Substitute Stock" msgstr "可用的替代品庫存" -#: build/serializers.py:1516 +#: build/serializers.py:1540 msgid "Available Variant Stock" msgstr "可用的變體庫存" -#: build/serializers.py:1729 +#: build/serializers.py:1753 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗數量超過已分配數量" -#: build/serializers.py:1766 +#: build/serializers.py:1790 msgid "Optional notes for the stock consumption" msgstr "庫存耗用的可選備註" -#: build/serializers.py:1783 +#: build/serializers.py:1807 msgid "Build item must point to the correct build order" msgstr "生產項必須指向正確的生產工單" -#: build/serializers.py:1788 +#: build/serializers.py:1812 msgid "Duplicate build item allocation" msgstr "重複的生產項分配" -#: build/serializers.py:1806 +#: build/serializers.py:1830 msgid "Build line must point to the correct build order" msgstr "生產行必須指向正確的生產工單" -#: build/serializers.py:1811 +#: build/serializers.py:1835 msgid "Duplicate build line allocation" msgstr "重複的生產行分配" -#: build/serializers.py:1823 +#: build/serializers.py:1847 msgid "At least one item or line must be provided" msgstr "至少必須提供一個項目或一行" @@ -1494,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" @@ -1518,19 +1518,19 @@ msgstr "逾期的生產訂單" msgid "Build order {bo} is now overdue" msgstr "生產訂單 {bo} 現已逾期" -#: common/api.py:735 +#: common/api.py:722 msgid "Is Link" msgstr "是否鏈接" -#: common/api.py:743 +#: common/api.py:730 msgid "Is File" msgstr "是否為文件" -#: common/api.py:790 +#: common/api.py:777 msgid "User does not have permission to delete these attachments" msgstr "用户沒有權限刪除此附件" -#: common/api.py:803 +#: common/api.py:790 msgid "User does not have permission to delete this attachment" msgstr "用户沒有權限刪除此附件" @@ -1550,7 +1550,7 @@ msgstr "未提供有效的貨幣代碼" msgid "No plugin" msgstr "暫無插件" -#: common/filters.py:351 +#: common/filters.py:359 msgid "Project Code Label" msgstr "項目編碼標籤" @@ -1617,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:2857 -#: importer/models.py:101 part/models.py:3569 part/models.py:3597 +#: importer/models.py:101 part/models.py:3578 part/models.py:3606 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 @@ -1628,7 +1628,7 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批發價數量" -#: common/models.py:1376 company/serializers.py:316 order/models.py:1890 +#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 #: order/models.py:3100 msgid "Price" msgstr "價格" @@ -1652,7 +1652,7 @@ msgstr "此網絡鈎子的名稱" #: 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:332 users/serializers.py:424 +#: users/models.py:554 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" @@ -1849,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 "為附件指定的模型類型無效" @@ -2048,7 +2048,7 @@ msgstr "參數模板" #: common/models.py:2442 msgid "Parameter Templates" -msgstr "" +msgstr "參數範本" #: common/models.py:2479 msgid "Checkbox parameters cannot have units" @@ -2058,7 +2058,7 @@ msgstr "勾選框參數不能有單位" msgid "Checkbox parameters cannot have choices" msgstr "複選框參數不能有選項" -#: common/models.py:2504 part/models.py:3667 +#: common/models.py:2504 part/models.py:3676 msgid "Choices must be unique" msgstr "選擇必須是唯一的" @@ -2068,7 +2068,7 @@ msgstr "參數模板名稱必須是唯一的" #: common/models.py:2543 msgid "Target model type for this parameter template" -msgstr "" +msgstr "此參數範本的目標模型類型" #: common/models.py:2549 msgid "Parameter Name" @@ -2094,7 +2094,7 @@ msgstr "勾選框" msgid "Is this parameter a checkbox?" msgstr "此參數是否為勾選框?" -#: common/models.py:2576 part/models.py:3754 +#: common/models.py:2576 part/models.py:3763 msgid "Choices" msgstr "選項" @@ -2106,13 +2106,13 @@ msgstr "此參數的有效選擇 (逗號分隔)" msgid "Selection list for this parameter" msgstr "此參數的選擇清單" -#: common/models.py:2593 part/models.py:3729 report/models.py:290 +#: common/models.py:2593 part/models.py:3738 report/models.py:290 msgid "Enabled" msgstr "已啓用" #: common/models.py:2594 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "是否啟用此參數範本?" #: common/models.py:2635 msgid "Parameter" @@ -2126,29 +2126,29 @@ msgstr "參數集" msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2752 common/serializers.py:882 +#: common/models.py:2752 common/serializers.py:892 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "為參數指定的模型類型無效" #: common/models.py:2788 msgid "Model ID" -msgstr "" +msgstr "模型 ID" #: common/models.py:2789 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "此參數的目標模型 ID" #: 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:244 +#: stock/serializers.py:245 msgid "Template" msgstr "模板" #: common/models.py:2799 msgid "Parameter template" -msgstr "" +msgstr "參數範本" -#: common/models.py:2804 common/models.py:2846 importer/models.py:574 +#: common/models.py:2804 common/models.py:2846 importer/models.py:581 msgid "Data" msgstr "數據" @@ -2156,18 +2156,18 @@ msgstr "數據" msgid "Parameter Value" msgstr "參數值" -#: common/models.py:2814 company/models.py:826 order/serializers.py:854 -#: order/serializers.py:2036 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:4059 part/models.py:4430 #: 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:2815 stock/serializers.py:733 +#: common/models.py:2815 stock/serializers.py:747 msgid "Optional note field" msgstr "可選註釋字段" @@ -2377,11 +2377,11 @@ 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" @@ -2391,85 +2391,85 @@ 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 +#: 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 "" +msgstr "使用者沒有權限建立或編輯此模型的參數" -#: common/serializers.py:955 common/serializers.py:1058 +#: common/serializers.py:970 common/serializers.py:1073 msgid "Selection list is locked" msgstr "選擇列表已鎖定" @@ -2547,19 +2547,19 @@ msgstr "只向超級管理員顯示關於信息" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "顯示超級使用者橫幅" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "以超級使用者身分登入時,在 UI 中顯示警告橫幅" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "顯示管理員橫幅" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "以管理員身分登入時,在 UI 中顯示警告橫幅" #: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" @@ -2859,8 +2859,8 @@ msgstr "零件默認為模板" msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:489 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 "組件" @@ -3034,11 +3034,11 @@ msgstr "如果有內部價格,內部價格將覆蓋價格範圍計算" #: common/setting/system.py:654 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "允許 BOM 零數量" #: 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:662 msgid "Enable label printing" @@ -3309,11 +3309,11 @@ msgstr "允許在訂單配送或完成後編輯銷售訂單" #: common/setting/system.py:892 msgid "Shipment Requires Checking" -msgstr "" +msgstr "發貨需要檢查" #: common/setting/system.py:894 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "在項目被檢查前,防止完成發貨" #: common/setting/system.py:900 msgid "Mark Shipped Orders as Complete" @@ -3477,7 +3477,7 @@ 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 "" +msgstr "啟用此設定將要求所有使用者設定多因素驗證。所有工作階段將立即中斷連線。" #: common/setting/system.py:1052 msgid "Check plugins on startup" @@ -3561,7 +3561,7 @@ msgstr "啟用專案代碼以追蹤專案" #: common/setting/system.py:1123 msgid "Enable Stocktake" -msgstr "" +msgstr "啟用盤點" #: common/setting/system.py:1125 msgid "Enable functionality for recording historical stock levels and value" @@ -3573,7 +3573,7 @@ msgstr "排除外部地點" #: common/setting/system.py:1133 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "從盤點計算中排除外部位置的庫存項目" #: common/setting/system.py:1139 msgid "Automatic Stocktake Period" @@ -3581,23 +3581,23 @@ msgstr "自動盤點週期" #: common/setting/system.py:1140 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "自動記錄盤點的天數間隔" #: common/setting/system.py:1146 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "刪除舊的盤點項目" #: common/setting/system.py:1148 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" +msgstr "刪除超過指定天數的盤點項目" #: common/setting/system.py:1154 msgid "Stocktake Deletion Interval" -msgstr "" +msgstr "盤點刪除間隔" #: common/setting/system.py:1156 msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "盤點項目將在指定天數後刪除" #: common/setting/system.py:1163 msgid "Delete Old Stock Tracking Entries" @@ -3605,15 +3605,15 @@ msgstr "刪除舊庫存的追蹤紀錄" #: common/setting/system.py:1165 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" +msgstr "刪除超過指定天數的庫存追蹤項目" #: common/setting/system.py:1171 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "庫存追蹤刪除間隔" #: common/setting/system.py:1173 msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "庫存追蹤項目將在指定天數後刪除" #: common/setting/system.py:1180 msgid "Display Users full names" @@ -3645,7 +3645,7 @@ msgstr "啟用設備 Ping" #: common/setting/system.py:1200 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "啟用對已註冊機器的定期 ping 任務以檢查其狀態" #: common/setting/user.py:23 msgid "Inline label display" @@ -3673,11 +3673,11 @@ msgstr "在瀏覽器中顯示PDF報告,而不是作為文件下載" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "表單欄位中的條碼掃描器" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "允許在表單欄位中使用條碼掃描器輸入" #: common/setting/user.py:51 msgid "Search Parts" @@ -3928,24 +3928,32 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled msgstr "停用:完整分類路徑以滑鼠懸停提示顯示。啟用:直接以文字顯示完整路徑。" #: common/setting/user.py:255 +msgid "Show Subassemblies in BOM table" +msgstr "" + +#: common/setting/user.py:256 +msgid "Enable display of subassemblies in the BOM table" +msgstr "" + +#: common/setting/user.py:261 msgid "Receive error reports" msgstr "接收錯誤報告" -#: common/setting/user.py:256 +#: common/setting/user.py:262 msgid "Receive notifications for system errors" msgstr "接收系統錯誤通知" -#: common/setting/user.py:261 +#: common/setting/user.py:267 msgid "Last used printing machines" msgstr "上次使用的打印設備" -#: common/setting/user.py:262 +#: common/setting/user.py:268 msgid "Save the last used printing machines for a user" msgstr "為用户保存上次使用的打印設備" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "所有模型" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3988,33 +3996,33 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "製造商處於活動狀態" -#: company/api.py:251 +#: company/api.py:252 msgid "Supplier Part is Active" msgstr "供應商零件處於激活狀態" -#: company/api.py:253 +#: company/api.py:254 msgid "Primary Supplier Part" -msgstr "" +msgstr "主要供應商零件" -#: company/api.py:257 +#: company/api.py:258 msgid "Internal Part is Active" msgstr "內部零件已激活" -#: company/api.py:262 +#: company/api.py:263 msgid "Supplier is Active" msgstr "供應商已激活" -#: company/api.py:274 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:281 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:291 +#: company/api.py:292 msgid "Has Stock" msgstr "有庫存" @@ -4195,7 +4203,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 "製造商零件" @@ -4213,12 +4221,12 @@ msgstr "選擇零件" msgid "Select manufacturer" msgstr "選擇製造商" -#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 -#: 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 "製造商零件編號" @@ -4242,8 +4250,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:666 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 @@ -4254,7 +4262,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 "供應商庫存管理單位" @@ -4264,11 +4272,11 @@ 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" @@ -4282,16 +4290,16 @@ msgstr "外部供應商零件鏈接的URL" msgid "Supplier part description" msgstr "供應商零件説明" -#: company/models.py:835 part/models.py:2295 +#: company/models.py:835 part/models.py:2300 msgid "base cost" msgstr "基本費用" -#: company/models.py:836 part/models.py:2296 +#: company/models.py:836 part/models.py:2301 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" -#: company/models.py:843 order/serializers.py:846 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,7 +4315,7 @@ msgstr "包裝數量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "單包供應的總數量。為單個項目留空。" -#: company/models.py:870 part/models.py:2302 +#: company/models.py:870 part/models.py:2307 msgid "multiple" msgstr "多個" @@ -4339,13 +4347,17 @@ 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 "" +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" @@ -4451,69 +4463,69 @@ 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 "" +msgstr "找不到提供 ID 的記錄" -#: importer/models.py:852 +#: 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" @@ -4621,7 +4633,7 @@ msgstr "正在打印" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "警告" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4637,7 +4649,7 @@ msgstr "已斷開連接" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "錯誤" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -4709,11 +4721,11 @@ msgstr "配置類型" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "屬性鍵值" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "屬性值" #: machine/serializers.py:30 users/models.py:238 msgid "Group" @@ -4721,11 +4733,11 @@ 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" @@ -4737,7 +4749,7 @@ 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" @@ -4821,7 +4833,7 @@ msgstr "訂單" msgid "Order Complete" msgstr "訂單完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:716 +#: order/api.py:573 order/api.py:577 order/serializers.py:753 msgid "Internal Part" msgstr "內部零件" @@ -4839,7 +4851,7 @@ msgstr "已出貨" #: order/api.py:1442 msgid "Shipment not found" -msgstr "" +msgstr "找不到發貨紀錄" #: order/api.py:1840 order/models.py:577 order/models.py:1973 #: order/models.py:2099 @@ -4918,7 +4930,7 @@ msgstr "開始日期" msgid "Scheduled start date for this order" msgstr "此訂單的預定開始日期" -#: order/models.py:477 order/models.py:1842 order/serializers.py:295 +#: 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 "預計日期" @@ -4956,7 +4968,7 @@ msgid "Order reference" msgstr "訂單參考" #: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 msgid "Status" msgstr "狀態" @@ -5010,10 +5022,10 @@ msgstr "數量必須是正數" #: order/models.py:1072 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "序號無法分配給虛擬零件" #: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1364 +#: stock/models.py:1086 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" @@ -5077,11 +5089,11 @@ msgstr "項目數量" #: order/models.py:1814 msgid "Line Number" -msgstr "" +msgstr "行號" #: order/models.py:1815 msgid "Line number for this item (optional)" -msgstr "" +msgstr "此項目的行號 (選填)" #: order/models.py:1822 msgid "Line item reference" @@ -5139,7 +5151,7 @@ msgstr "已接收" msgid "Number of items received" msgstr "收到的物品數量" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:652 +#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 msgid "Purchase Price" msgstr "採購價格" @@ -5211,8 +5223,8 @@ msgstr "審核人" msgid "User who checked this shipment" msgstr "檢查此裝運的用户" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1698 -#: order/serializers.py:1822 +#: 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 "配送" @@ -5247,7 +5259,7 @@ msgstr "發貨沒有分配庫存項目" #: order/models.py:2446 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "發貨紀錄必須在完成前進行檢查" #: order/models.py:2516 msgid "Sales Order Extra Line" @@ -5277,7 +5289,7 @@ msgstr "分配數量不能超過庫存數量" msgid "Allocation quantity must be greater than zero" msgstr "分配的數量必須大於零" -#: order/models.py:2602 order/serializers.py:1568 +#: order/models.py:2602 order/serializers.py:1668 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化庫存項目的數量必須為1" @@ -5351,7 +5363,7 @@ msgstr "接收日期" #: order/models.py:3081 msgid "The date this return item was received" -msgstr "" +msgstr "收到此退貨項目的日期" #: order/models.py:3093 msgid "Outcome" @@ -5393,13 +5405,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 @@ -5412,216 +5424,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:432 +#: order/serializers.py:444 msgid "Supplier Name" msgstr "供應商名稱" -#: order/serializers.py:477 +#: order/serializers.py:493 msgid "Order cannot be cancelled" msgstr "訂單不能取消" -#: order/serializers.py:492 order/serializers.py:1589 +#: order/serializers.py:508 order/serializers.py:1689 msgid "Allow order to be closed with incomplete line items" msgstr "允許關閉行項目不完整的訂單" -#: order/serializers.py:502 order/serializers.py:1599 +#: order/serializers.py:518 order/serializers.py:1699 msgid "Order has incomplete line items" msgstr "訂單中的行項目不完整" -#: order/serializers.py:622 +#: order/serializers.py:638 msgid "Order is not open" msgstr "訂單未打開" -#: order/serializers.py:651 +#: order/serializers.py:676 msgid "Auto Pricing" msgstr "自動定價" -#: order/serializers.py:653 +#: order/serializers.py:678 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根據供應商零件數據自動計算採購價格" -#: order/serializers.py:667 +#: order/serializers.py:695 msgid "Purchase price currency" msgstr "購買價格貨幣" -#: order/serializers.py:689 +#: order/serializers.py:726 msgid "Merge Items" msgstr "合併項目" -#: order/serializers.py:691 +#: order/serializers.py:728 msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:698 part/serializers.py:482 +#: order/serializers.py:735 part/serializers.py:485 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:712 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:720 +#: order/serializers.py:757 msgid "Internal Part Name" msgstr "內部零件名稱" -#: order/serializers.py:736 +#: order/serializers.py:773 msgid "Supplier part must be specified" msgstr "必須指定供應商零件" -#: order/serializers.py:739 +#: order/serializers.py:776 msgid "Purchase order must be specified" msgstr "必須指定採購訂單" -#: order/serializers.py:747 +#: order/serializers.py:784 msgid "Supplier must match purchase order" msgstr "供應商必須匹配採購訂單" -#: order/serializers.py:748 +#: order/serializers.py:785 msgid "Purchase order must match supplier" msgstr "採購訂單必須與供應商匹配" -#: order/serializers.py:796 order/serializers.py:1669 +#: order/serializers.py:837 order/serializers.py:1769 msgid "Line Item" msgstr "行項目" -#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 msgid "Select destination location for received items" msgstr "為收到的物品選擇目的地位置" -#: order/serializers.py:821 +#: order/serializers.py:862 msgid "Enter batch code for incoming stock items" msgstr "輸入入庫項目的批號" -#: order/serializers.py:828 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:829 +#: order/serializers.py:870 msgid "Enter expiry date for incoming stock items" msgstr "輸入入庫庫存項目的到期日" -#: order/serializers.py:837 +#: order/serializers.py:878 msgid "Enter serial numbers for incoming stock items" msgstr "輸入入庫庫存項目的序列號" -#: order/serializers.py:847 +#: order/serializers.py:888 msgid "Override packaging information for incoming stock items" msgstr "覆蓋傳入庫存項目的包裝資料" -#: order/serializers.py:855 order/serializers.py:2037 +#: order/serializers.py:896 order/serializers.py:2145 msgid "Additional note for incoming stock items" msgstr "傳入庫存項目的附加説明" -#: order/serializers.py:862 +#: order/serializers.py:903 msgid "Barcode" msgstr "條形碼" -#: order/serializers.py:863 +#: order/serializers.py:904 msgid "Scanned barcode" msgstr "掃描條形碼" -#: order/serializers.py:879 +#: order/serializers.py:920 msgid "Barcode is already in use" msgstr "條形碼已被使用" -#: order/serializers.py:962 order/serializers.py:2056 +#: order/serializers.py:1003 order/serializers.py:2164 msgid "Line items must be provided" msgstr "必須提供行項目" -#: order/serializers.py:981 +#: order/serializers.py:1022 msgid "Destination location must be specified" msgstr "必須指定目標位置" -#: order/serializers.py:988 +#: order/serializers.py:1029 msgid "Supplied barcode values must be unique" msgstr "提供的條形碼值必須是唯一的" -#: order/serializers.py:1109 +#: order/serializers.py:1154 msgid "Shipments" msgstr "配送紀錄" -#: order/serializers.py:1113 +#: order/serializers.py:1158 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1117 +#: order/serializers.py:1162 msgid "Allocated Lines" -msgstr "" +msgstr "已分配行" -#: order/serializers.py:1296 +#: order/serializers.py:1355 msgid "Sale price currency" msgstr "售出價格貨幣" -#: order/serializers.py:1343 +#: order/serializers.py:1402 msgid "Allocated Items" msgstr "已分配項目" -#: order/serializers.py:1500 +#: order/serializers.py:1600 msgid "No shipment details provided" msgstr "未提供裝運詳細信息" -#: order/serializers.py:1532 order/serializers.py:1678 +#: order/serializers.py:1632 order/serializers.py:1778 msgid "Line item is not associated with this order" msgstr "行項目與此訂單不關聯" -#: order/serializers.py:1551 +#: order/serializers.py:1651 msgid "Quantity must be positive" msgstr "數量必須為正" -#: order/serializers.py:1688 +#: order/serializers.py:1788 msgid "Enter serial numbers to allocate" msgstr "輸入要分配的序列號" -#: order/serializers.py:1710 order/serializers.py:1830 +#: order/serializers.py:1810 order/serializers.py:1930 msgid "Shipment has already been shipped" msgstr "貨物已發出" -#: order/serializers.py:1713 order/serializers.py:1833 +#: order/serializers.py:1813 order/serializers.py:1933 msgid "Shipment is not associated with this order" msgstr "發貨與此訂單無關" -#: order/serializers.py:1768 +#: order/serializers.py:1868 msgid "No match found for the following serial numbers" msgstr "未找到以下序列號的匹配項" -#: order/serializers.py:1775 +#: order/serializers.py:1875 msgid "The following serial numbers are unavailable" msgstr "以下序列號不可用" -#: order/serializers.py:1998 +#: order/serializers.py:2106 msgid "Return order line item" msgstr "退貨訂單行項目" -#: order/serializers.py:2008 +#: order/serializers.py:2116 msgid "Line item does not match return order" msgstr "行項目與退貨訂單不匹配" -#: order/serializers.py:2011 +#: order/serializers.py:2119 msgid "Line item has already been received" msgstr "行項目已收到" -#: order/serializers.py:2048 +#: order/serializers.py:2156 msgid "Items can only be received against orders which are in progress" msgstr "只能根據正在進行的訂單接收物品" -#: order/serializers.py:2120 +#: order/serializers.py:2232 msgid "Quantity to return" msgstr "退回數量" -#: order/serializers.py:2137 +#: order/serializers.py:2257 msgid "Line price currency" msgstr "行價格貨幣" @@ -5732,71 +5744,71 @@ msgstr "排除指定類別下的子類別" msgid "Has Results" msgstr "有結果" -#: part/api.py:653 +#: part/api.py:654 msgid "Is Variant" msgstr "為變體" -#: part/api.py:661 +#: part/api.py:662 msgid "Is Revision" msgstr "是修訂版本" -#: part/api.py:671 +#: part/api.py:672 msgid "Has Revisions" msgstr "有修訂版本" -#: part/api.py:852 +#: part/api.py:853 msgid "BOM Valid" msgstr "物料清單合規" -#: part/api.py:961 -msgid "Cascade Categories" -msgstr "" - #: part/api.py:962 +msgid "Cascade Categories" +msgstr "級聯類別" + +#: part/api.py:963 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "若為 true,則包含給定類別的子類別中的項目" -#: part/api.py:968 +#: part/api.py:969 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "依數字類別 ID 或常值 'null' 篩選" -#: part/api.py:1280 +#: part/api.py:1281 msgid "Assembly part is active" -msgstr "" +msgstr "組件零件處於作用中狀態" -#: part/api.py:1284 +#: part/api.py:1285 msgid "Assembly part is trackable" -msgstr "" +msgstr "組件零件可追蹤" -#: part/api.py:1288 +#: part/api.py:1289 msgid "Assembly part is testable" msgstr "裝配部份是可測試的" -#: part/api.py:1293 +#: part/api.py:1294 msgid "Component part is active" -msgstr "" +msgstr "子零件處於作用中狀態" -#: part/api.py:1297 +#: part/api.py:1298 msgid "Component part is trackable" -msgstr "" +msgstr "子零件可追蹤" -#: part/api.py:1301 +#: part/api.py:1302 msgid "Component part is testable" msgstr "組件部份是可測試的" -#: part/api.py:1305 +#: part/api.py:1306 msgid "Component part is an assembly" -msgstr "" +msgstr "子零件是一個組件" -#: part/api.py:1309 +#: part/api.py:1310 msgid "Component part is virtual" -msgstr "" +msgstr "子零件是虛擬的" -#: part/api.py:1313 +#: part/api.py:1314 msgid "Has available stock" -msgstr "" +msgstr "有可用庫存" -#: part/api.py:1370 +#: part/api.py:1371 msgid "Uses" msgstr "使用" @@ -5805,7 +5817,7 @@ msgstr "使用" msgid "Part Category" msgstr "零件類別" -#: part/models.py:93 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:28 msgid "Part Categories" msgstr "零件類別" @@ -5837,7 +5849,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 "圖標(可選)" @@ -5858,17 +5870,17 @@ 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:29 msgid "Parts" 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" @@ -5903,7 +5915,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" @@ -5973,7 +5985,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" @@ -6006,7 +6018,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 "最低庫存" @@ -6086,756 +6098,756 @@ msgstr "新建用户" msgid "Owner responsible for this part" msgstr "此零件的負責人" -#: part/models.py:2303 +#: part/models.py:2308 msgid "Sell multiple" msgstr "出售多個" -#: part/models.py:3308 +#: part/models.py:3317 msgid "Currency used to cache pricing calculations" msgstr "用於緩存定價計算的貨幣" -#: part/models.py:3324 +#: part/models.py:3333 msgid "Minimum BOM Cost" msgstr "最低物料清單成本" -#: part/models.py:3325 +#: part/models.py:3334 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3331 +#: part/models.py:3340 msgid "Maximum BOM Cost" msgstr "物料清單的最高成本" -#: part/models.py:3332 +#: part/models.py:3341 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3338 +#: part/models.py:3347 msgid "Minimum Purchase Cost" msgstr "最低購買成本" -#: part/models.py:3339 +#: part/models.py:3348 msgid "Minimum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3345 +#: part/models.py:3354 msgid "Maximum Purchase Cost" msgstr "最大購買成本" -#: part/models.py:3346 +#: part/models.py:3355 msgid "Maximum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3352 +#: part/models.py:3361 msgid "Minimum Internal Price" msgstr "最低內部價格" -#: part/models.py:3353 +#: part/models.py:3362 msgid "Minimum cost based on internal price breaks" msgstr "基於內部批發價的最低成本" -#: part/models.py:3359 +#: part/models.py:3368 msgid "Maximum Internal Price" msgstr "最大內部價格" -#: part/models.py:3360 +#: part/models.py:3369 msgid "Maximum cost based on internal price breaks" msgstr "基於內部批發價的最高成本" -#: part/models.py:3366 +#: part/models.py:3375 msgid "Minimum Supplier Price" msgstr "供應商最低價格" -#: part/models.py:3367 +#: part/models.py:3376 msgid "Minimum price of part from external suppliers" msgstr "外部供應商零件的最低價格" -#: part/models.py:3373 +#: part/models.py:3382 msgid "Maximum Supplier Price" msgstr "供應商最高價格" -#: part/models.py:3374 +#: part/models.py:3383 msgid "Maximum price of part from external suppliers" msgstr "來自外部供應商的商零件的最高價格" -#: part/models.py:3380 +#: part/models.py:3389 msgid "Minimum Variant Cost" msgstr "最小變體成本" -#: part/models.py:3381 +#: part/models.py:3390 msgid "Calculated minimum cost of variant parts" msgstr "計算出的變體零件的最低成本" -#: part/models.py:3387 +#: part/models.py:3396 msgid "Maximum Variant Cost" msgstr "最大變體成本" -#: part/models.py:3388 +#: part/models.py:3397 msgid "Calculated maximum cost of variant parts" msgstr "計算出的變體零件的最大成本" -#: part/models.py:3394 part/models.py:3408 +#: part/models.py:3403 part/models.py:3417 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3395 +#: part/models.py:3404 msgid "Override minimum cost" msgstr "覆蓋最低成本" -#: part/models.py:3401 part/models.py:3415 +#: part/models.py:3410 part/models.py:3424 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3402 +#: part/models.py:3411 msgid "Override maximum cost" msgstr "覆蓋最大成本" -#: part/models.py:3409 +#: part/models.py:3418 msgid "Calculated overall minimum cost" msgstr "計算總最低成本" -#: part/models.py:3416 +#: part/models.py:3425 msgid "Calculated overall maximum cost" msgstr "計算總最大成本" -#: part/models.py:3422 +#: part/models.py:3431 msgid "Minimum Sale Price" msgstr "最低售出價格" -#: part/models.py:3423 +#: part/models.py:3432 msgid "Minimum sale price based on price breaks" msgstr "基於批發價的最低售出價格" -#: part/models.py:3429 +#: part/models.py:3438 msgid "Maximum Sale Price" msgstr "最高售出價格" -#: part/models.py:3430 +#: part/models.py:3439 msgid "Maximum sale price based on price breaks" msgstr "基於批發價的最大售出價格" -#: part/models.py:3436 +#: part/models.py:3445 msgid "Minimum Sale Cost" msgstr "最低銷售成本" -#: part/models.py:3437 +#: part/models.py:3446 msgid "Minimum historical sale price" msgstr "歷史最低售出價格" -#: part/models.py:3443 +#: part/models.py:3452 msgid "Maximum Sale Cost" msgstr "最高銷售成本" -#: part/models.py:3444 +#: part/models.py:3453 msgid "Maximum historical sale price" msgstr "歷史最高售出價格" -#: part/models.py:3462 +#: part/models.py:3471 msgid "Part for stocktake" msgstr "用於盤點的零件" -#: part/models.py:3467 +#: part/models.py:3476 msgid "Item Count" msgstr "物品數量" -#: part/models.py:3468 +#: part/models.py:3477 msgid "Number of individual stock entries at time of stocktake" msgstr "盤點時的個別庫存條目數" -#: part/models.py:3476 +#: part/models.py:3485 msgid "Total available stock at time of stocktake" msgstr "盤點時可用庫存總額" -#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3105 msgid "Date" msgstr "日期" -#: part/models.py:3481 +#: part/models.py:3490 msgid "Date stocktake was performed" msgstr "進行盤點的日期" -#: part/models.py:3488 +#: part/models.py:3497 msgid "Minimum Stock Cost" msgstr "最低庫存成本" -#: part/models.py:3489 +#: part/models.py:3498 msgid "Estimated minimum cost of stock on hand" msgstr "現有存庫存最低成本估算" -#: part/models.py:3495 +#: part/models.py:3504 msgid "Maximum Stock Cost" msgstr "最高庫存成本" -#: part/models.py:3496 +#: part/models.py:3505 msgid "Estimated maximum cost of stock on hand" msgstr "目前庫存最高成本估算" -#: part/models.py:3506 +#: part/models.py:3515 msgid "Part Sale Price Break" msgstr "零件售出價格折扣" -#: part/models.py:3620 +#: part/models.py:3629 msgid "Part Test Template" msgstr "零件測試模板" -#: part/models.py:3646 +#: part/models.py:3655 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名稱無效 - 必須包含至少一個字母或者數字" -#: part/models.py:3678 +#: part/models.py:3687 msgid "Test templates can only be created for testable parts" msgstr "測試模板只能為可拆分的部件創建" -#: part/models.py:3692 +#: part/models.py:3701 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主鍵的測試模板" -#: part/models.py:3709 +#: part/models.py:3718 msgid "Test Name" msgstr "測試名" -#: part/models.py:3710 +#: part/models.py:3719 msgid "Enter a name for the test" msgstr "輸入測試的名稱" -#: part/models.py:3716 +#: part/models.py:3725 msgid "Test Key" msgstr "測試主鍵" -#: part/models.py:3717 +#: part/models.py:3726 msgid "Simplified key for the test" msgstr "簡化測試主鍵" -#: part/models.py:3724 +#: part/models.py:3733 msgid "Test Description" msgstr "測試説明" -#: part/models.py:3725 +#: part/models.py:3734 msgid "Enter description for this test" msgstr "輸入測試的描述" -#: part/models.py:3729 +#: part/models.py:3738 msgid "Is this test enabled?" msgstr "此測試是否已啓用?" -#: part/models.py:3734 +#: part/models.py:3743 msgid "Required" msgstr "必須的" -#: part/models.py:3735 +#: part/models.py:3744 msgid "Is this test required to pass?" msgstr "需要此測試才能通過嗎?" -#: part/models.py:3740 +#: part/models.py:3749 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3741 +#: part/models.py:3750 msgid "Does this test require a value when adding a test result?" msgstr "添加測試結果時是否需要一個值?" -#: part/models.py:3746 +#: part/models.py:3755 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3748 +#: part/models.py:3757 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加測試結果時是否需要文件附件?" -#: part/models.py:3755 +#: part/models.py:3764 msgid "Valid choices for this test (comma-separated)" msgstr "此測試的有效選擇 (逗號分隔)" -#: part/models.py:3949 +#: part/models.py:3961 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清單項目不能被修改 - 裝配已鎖定" -#: part/models.py:3956 +#: part/models.py:3968 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清單項目不能修改 - 變體裝配已鎖定" -#: part/models.py:3966 +#: part/models.py:3978 msgid "Select parent part" msgstr "選擇父零件" -#: part/models.py:3976 +#: part/models.py:3988 msgid "Sub part" msgstr "子零件" -#: part/models.py:3977 +#: part/models.py:3989 msgid "Select part to be used in BOM" msgstr "選擇要用於物料清單的零件" -#: part/models.py:3988 +#: part/models.py:4000 msgid "BOM quantity for this BOM item" msgstr "此物料清單項目的數量" -#: part/models.py:3994 +#: part/models.py:4006 msgid "This BOM item is optional" msgstr "此物料清單項目是可選的" -#: part/models.py:4000 +#: part/models.py:4012 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "這個物料清單項目是耗材 (它沒有在生產訂單中被追蹤)" -#: part/models.py:4008 +#: part/models.py:4020 msgid "Setup Quantity" msgstr "建置額外數量" -#: part/models.py:4009 +#: part/models.py:4021 msgid "Extra required quantity for a build, to account for setup losses" msgstr "為彌補建置 / 開工損耗所需的額外數量" -#: part/models.py:4017 +#: part/models.py:4029 msgid "Attrition" msgstr "損耗率" -#: part/models.py:4019 +#: part/models.py:4031 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "製造預估損耗(百分比 0–100)" -#: part/models.py:4030 +#: part/models.py:4042 msgid "Rounding Multiple" msgstr "進位倍數" -#: part/models.py:4032 +#: part/models.py:4044 msgid "Round up required production quantity to nearest multiple of this value" msgstr "將所需生產數量向上取整到此數值的整數倍" -#: part/models.py:4040 +#: part/models.py:4052 msgid "BOM item reference" msgstr "物料清單項目引用" -#: part/models.py:4048 +#: part/models.py:4060 msgid "BOM item notes" msgstr "物料清單項目註釋" -#: part/models.py:4054 +#: part/models.py:4066 msgid "Checksum" msgstr "校驗和" -#: part/models.py:4055 +#: part/models.py:4067 msgid "BOM line checksum" msgstr "物料清單行校驗和" -#: part/models.py:4060 +#: part/models.py:4072 msgid "Validated" msgstr "已驗證" -#: part/models.py:4061 +#: part/models.py:4073 msgid "This BOM item has been validated" msgstr "此物料清單項目已驗證" -#: part/models.py:4066 +#: part/models.py:4078 msgid "Gets inherited" msgstr "獲取繼承的" -#: part/models.py:4067 +#: part/models.py:4079 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清單項目是由物料清單繼承的變體零件" -#: part/models.py:4073 +#: part/models.py:4085 msgid "Stock items for variant parts can be used for this BOM item" msgstr "變體零件的庫存項可以用於此物料清單項目" -#: part/models.py:4180 stock/models.py:932 +#: part/models.py:4194 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追蹤零件的數量必須是整數" -#: part/models.py:4190 part/models.py:4192 +#: part/models.py:4204 part/models.py:4206 msgid "Sub part must be specified" msgstr "必須指定子零件" -#: part/models.py:4343 +#: part/models.py:4357 msgid "BOM Item Substitute" msgstr "物料清單項目替代品" -#: part/models.py:4364 +#: part/models.py:4378 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能與主零件相同" -#: part/models.py:4377 +#: part/models.py:4391 msgid "Parent BOM item" msgstr "上級物料清單項目" -#: part/models.py:4385 +#: part/models.py:4399 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4401 +#: part/models.py:4415 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4409 +#: part/models.py:4423 msgid "Part 2" msgstr "零件2" -#: part/models.py:4410 +#: part/models.py:4424 msgid "Select Related Part" msgstr "選擇相關的零件" -#: part/models.py:4417 +#: part/models.py:4431 msgid "Note for this relationship" msgstr "此關係的備註" -#: part/models.py:4436 +#: part/models.py:4450 msgid "Part relationship cannot be created between a part and itself" msgstr "零件關係不能在零件和自身之間創建" -#: part/models.py:4441 +#: part/models.py:4455 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 -#: users/ruleset.py:30 +#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: users/ruleset.py:32 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 "" +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 "產製報表" -#: 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 "" +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 "複製物料清單項目時複製替代品零件" @@ -7363,19 +7375,19 @@ msgstr "支援自 InvenTree 匯出資料" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "排除停用" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "排除已停用的參數" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "參數匯出工具" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "模型參數資料的匯出工具" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" @@ -7451,7 +7463,7 @@ msgstr "整合的 Slack 通知方式" #: plugin/builtin/integration/core_notifications.py:131 msgid "Slack incoming webhook URL" -msgstr "" +msgstr "Slack 傳入 Webhook URL" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7471,11 +7483,11 @@ msgstr "默認貨幣兑換集成" #: plugin/builtin/integration/machine_types.py:15 msgid "InvenTree Machines" -msgstr "" +msgstr "InvenTree 機器" #: plugin/builtin/integration/machine_types.py:16 msgid "Built-in machine types for InvenTree" -msgstr "" +msgstr "InvenTree 內建機器類型" #: plugin/builtin/integration/part_notifications.py:20 msgid "Part Notifications" @@ -7639,7 +7651,7 @@ msgstr "作為‘TME’的供應商" #: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 #: plugin/serializers.py:275 msgid "Only superuser accounts can administer plugins" -msgstr "" +msgstr "只有超級使用者帳號可以管理外掛程式" #: plugin/installer.py:243 msgid "Plugin installation is disabled" @@ -7647,11 +7659,11 @@ msgstr "插件安裝已禁用" #: plugin/installer.py:273 msgid "No package name or URL provided for installation" -msgstr "" +msgstr "未提供要安裝的套件名稱或 URL" #: plugin/installer.py:277 msgid "Invalid characters in package name or URL" -msgstr "" +msgstr "套件名稱或 URL 中包含無效字元" #: plugin/installer.py:287 msgid "Installed plugin successfully" @@ -7758,7 +7770,7 @@ msgstr "軟件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:389 +#: plugin/plugin.py:388 msgid "No author found" msgstr "未找到作者" @@ -7951,7 +7963,7 @@ msgstr "安裝尚未確認" #: plugin/serializers.py:152 msgid "Either packagename or URL must be provided" -msgstr "" +msgstr "必須提供套件名稱或 URL" #: plugin/serializers.py:191 msgid "Full reload" @@ -8172,7 +8184,7 @@ msgstr "資產文件描述" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "使用者必須經過驗證才能儲存報告範本" #: report/serializers.py:118 msgid "Select report template" @@ -8288,7 +8300,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 "已安裝的項目" @@ -8323,15 +8335,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" @@ -8339,7 +8351,7 @@ 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" @@ -8361,7 +8373,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 "上級地點" @@ -8445,25 +8457,25 @@ 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 "過期" #: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "提供一個 StockItem 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 "依數字位置 ID 或常值 'null' 篩選" #: stock/api.py:1087 msgid "Quantity is required" @@ -8487,11 +8499,11 @@ 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" @@ -8530,7 +8542,7 @@ msgstr "為所有沒有圖標的位置設置默認圖標(可選)" msgid "Stock Location" msgstr "庫存地點" -#: stock/models.py:148 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:31 msgid "Stock Locations" msgstr "庫存地點" @@ -8579,7 +8591,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 "無法為虛擬零件創建庫存項" @@ -8624,7 +8636,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 "包裝此庫存物品存儲在" @@ -8640,7 +8652,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 "此庫存項的批號" @@ -8753,7 +8765,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 "複製庫存項" @@ -8877,7 +8889,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 "此結果的測試模板" @@ -8901,222 +8913,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 "上一個序列號" @@ -9582,115 +9594,119 @@ msgstr "主要群組" msgid "Primary group for the user" msgstr "使用者的主要群組" -#: users/ruleset.py:26 +#: users/ruleset.py:27 msgid "Admin" msgstr "管理員" -#: users/ruleset.py:32 +#: users/ruleset.py:30 +msgid "Bills of Material" +msgstr "" + +#: users/ruleset.py:34 msgid "Purchase Orders" msgstr "採購訂單" -#: users/ruleset.py:33 +#: users/ruleset.py:35 msgid "Sales Orders" msgstr "銷售訂單" -#: users/ruleset.py:34 +#: users/ruleset.py:36 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:244 +#: users/serializers.py:240 msgid "User must be authenticated" -msgstr "" +msgstr "使用者必須經過驗證" -#: users/serializers.py:253 +#: users/serializers.py:249 msgid "Only a superuser can create a token for another user" -msgstr "" +msgstr "只有超級使用者可以為其他使用者建立權杖" -#: users/serializers.py:322 +#: users/serializers.py:329 msgid "Administrator" -msgstr "" +msgstr "管理員" -#: users/serializers.py:323 +#: users/serializers.py:330 msgid "Does this user have administrative permissions" -msgstr "" +msgstr "此使用者是否具有管理權限" -#: users/serializers.py:328 users/serializers.py:417 +#: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" msgstr "超級用户" -#: users/serializers.py:328 users/serializers.py:418 +#: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" msgstr "此用户是否為超級用户" -#: users/serializers.py:332 users/serializers.py:425 +#: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" msgstr "此用户帳户是否已激活" -#: users/serializers.py:344 +#: users/serializers.py:351 msgid "Only a superuser can adjust this field" msgstr "僅超級使用者可調整此欄位" -#: users/serializers.py:372 +#: users/serializers.py:379 msgid "Password" msgstr "密碼" -#: users/serializers.py:373 +#: users/serializers.py:380 msgid "Password for the user" msgstr "使用者密碼" -#: users/serializers.py:379 +#: users/serializers.py:386 msgid "Override warning" msgstr "忽略警告" -#: users/serializers.py:380 +#: users/serializers.py:387 msgid "Override the warning about password rules" msgstr "忽略密碼規則警告" -#: users/serializers.py:410 +#: users/serializers.py:417 msgid "Staff" -msgstr "" +msgstr "員工" -#: users/serializers.py:411 +#: users/serializers.py:418 msgid "Does this user have staff permissions" -msgstr "" +msgstr "此使用者是否具有員工權限" -#: users/serializers.py:461 +#: users/serializers.py:468 msgid "You do not have permission to create users" msgstr "您沒有建立使用者的權限" -#: users/serializers.py:482 +#: users/serializers.py:489 msgid "Your account has been created." msgstr "您的帳號已經建立完成。" -#: users/serializers.py:484 +#: users/serializers.py:491 msgid "Please use the password reset function to login" msgstr "請使用重設密碼功能來登入" -#: users/serializers.py:490 +#: users/serializers.py:497 msgid "Welcome to InvenTree" msgstr "歡迎使用 InvenTree" diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index dbf8cf815a..23e154f751 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -599,6 +599,7 @@ class PartValidateBOM(RetrieveUpdateAPI): queryset = Part.objects.all() serializer_class = part_serializers.PartBomValidateSerializer + role_required = 'bom.change' @extend_schema( responses={ @@ -1056,6 +1057,7 @@ class PartList( filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ + 'id', 'name', 'creation_date', 'IPN', diff --git a/src/backend/InvenTree/part/filters.py b/src/backend/InvenTree/part/filters.py index 92887e57c8..d6610260d5 100644 --- a/src/backend/InvenTree/part/filters.py +++ b/src/backend/InvenTree/part/filters.py @@ -171,7 +171,14 @@ def annotate_build_order_requirements(reference: str = '') -> QuerySet: build_filter = Q(build__status__in=BuildStatusGroups.ACTIVE_CODES) return Coalesce( - SubquerySum(f'{reference}used_in__build_lines__quantity', filter=build_filter), + SubquerySum( + ExpressionWrapper( + F(f'{reference}used_in__build_lines__quantity') + - F(f'{reference}used_in__build_lines__consumed'), + output_field=DecimalField(), + ), + filter=build_filter, + ), Decimal(0), output_field=models.DecimalField(), ) diff --git a/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py b/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py new file mode 100644 index 0000000000..2b6d8d8e7c --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py @@ -0,0 +1,43 @@ +# Generated by Django 5.2.13 on 2026-04-27 22:33 + +from django.db import migrations + + +def update_bom_role(apps, schema_editor): + """Update the ruleset for the BOM role. + + As the 'bom' role was previously covered by the 'part' role, + we need to update the ruleset to include the correct models. + + """ + from django.contrib.auth.models import Group + from users.ruleset import RuleSetEnum + from users.models import RuleSet + + # For each existing group, create a new 'bom' ruleset + for group in Group.objects.all(): + # Find a matching 'part' ruleset for this group + if ruleset := RuleSet.objects.filter(name=RuleSetEnum.PART, group=group).first(): + # A 'part' ruleset exists for this group - create a new 'bom' ruleset based on this + ruleset.pk = None # Create a new instance + ruleset.name = RuleSetEnum.BOM + ruleset.save() + + else: + # No 'part' ruleset exists for this group - create a default 'bom' ruleset + RuleSet.objects.create( + name=RuleSetEnum.BOM, + group=group + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("part", "0147_remove_part_default_supplier"), + ("users", "0014_userprofile") + ] + + operations = [ + migrations.RunPython(update_bom_role, reverse_code=migrations.RunPython.noop), + ] diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index 152df37b45..c006312851 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). @@ -2473,6 +2478,7 @@ class Part( category__in=categories ).order_by('-category__level') + template_ids = set() parameters = [] content_type = ContentType.objects.get_for_model(Part) @@ -2483,6 +2489,12 @@ class Part( ).exists(): continue + # Ensure we do not create duplicate parameters if multiple categories have the same template + if category_template.template.pk in template_ids: + continue + + template_ids.add(category_template.template.pk) + parameters.append( Parameter( template=category_template.template, @@ -2492,8 +2504,7 @@ class Part( ) ) - if len(parameters) > 0: - Parameter.objects.bulk_create(parameters) + Parameter.objects.bulk_create(parameters) def getTestTemplates( self, required=None, include_parent: bool = True, enabled=None @@ -2625,9 +2636,7 @@ class Part( parts = [] # Child parts - children = self.get_descendants(include_self=False) - - for child in children: + for child in self.get_descendants(include_self=False): parts.append(child) # Immediate parent, and siblings @@ -3923,9 +3932,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 +4091,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/test_api.py b/src/backend/InvenTree/part/test_api.py index da8bada994..1ba1caad90 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -1010,7 +1010,7 @@ class PartAPITest(PartAPITestBase): filters = {'active': True, 'assembly': True, 'bom_valid': True} # Initially, there are no parts with a valid BOM - response = self.get(url, filters) + response = self.get(url, filters, expected_code=200) self.assertEqual(len(response.data), 0) @@ -1038,6 +1038,14 @@ class PartAPITest(PartAPITestBase): # Test the BOM validation API endpoint bom_url = reverse('api-part-bom-validate', kwargs={'pk': assembly.pk}) + + # Initially, we do not have the required role permissions + self.get(bom_url, expected_code=403) + + # Add required role + self.assignRole('bom.add') + + # Now we should be able to validate the BOM via the API data = self.get(bom_url, expected_code=200).data self.assertEqual(data['bom_validated'], True) @@ -2913,6 +2921,12 @@ class BomItemTest(InvenTreeAPITestCase): # Count first, operate directly on Model countbefore = BomItemSubstitute.objects.count() + # Initially, the user does not have the required permissions + self.get(url, expected_code=403) + + # Assign the permission to view the substitute list + self.assignRole('bom.add') + # Now, make sure API returns the same count response = self.get(url, expected_code=200) self.assertEqual(len(response.data), countbefore) 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/plugin.py b/src/backend/InvenTree/plugin/plugin.py index 9019951c11..1e9518cc99 100644 --- a/src/backend/InvenTree/plugin/plugin.py +++ b/src/backend/InvenTree/plugin/plugin.py @@ -5,7 +5,6 @@ import json import re import warnings from datetime import datetime -from distutils.sysconfig import get_python_lib from importlib.metadata import PackageNotFoundError, metadata from pathlib import Path from typing import Optional @@ -528,6 +527,8 @@ class InvenTreePlugin(VersionMixin, MixinBase, MetaBase): @mark_final def is_editable(cls): """Returns if the current part is editable.""" + from distutils.sysconfig import get_python_lib + pkg_name = cls.__name__.split('.')[0] dist_info = list(Path(get_python_lib()).glob(f'{pkg_name}-*.dist-info')) return bool(len(dist_info) == 1) diff --git a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py index 6dd75904a9..428edaecfd 100644 --- a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py +++ b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py @@ -1,11 +1,16 @@ # Generated by Django 4.2.12 on 2024-05-23 16:40 +import structlog + from importlib import import_module from django.conf import settings from django.db import migrations +logger = structlog.getLogger('inventree') + + def clear_sessions(apps, schema_editor): # pragma: no cover """Clear all user sessions.""" @@ -16,7 +21,7 @@ def clear_sessions(apps, schema_editor): # pragma: no cover try: engine = import_module(settings.SESSION_ENGINE) engine.SessionStore.clear_expired() - print('\nCleared all user sessions to deal with GHSA-2crp-q9pc-457j') + logger.info('Cleared all user sessions to deal with GHSA-2crp-q9pc-457j') except Exception: # Database may not be ready yet, so this does not matter anyhow pass diff --git a/src/backend/InvenTree/users/oauth2_scopes.py b/src/backend/InvenTree/users/oauth2_scopes.py index b5e687ce1f..123cb8d528 100644 --- a/src/backend/InvenTree/users/oauth2_scopes.py +++ b/src/backend/InvenTree/users/oauth2_scopes.py @@ -15,6 +15,7 @@ _roles = { 'part': 'Role Parts', 'stock_location': 'Role Stock Locations', 'stock': 'Role Stock Items', + 'bom': 'Role Bills of Material', 'build': 'Role Build Orders', 'purchase_order': 'Role Purchase Orders', 'sales_order': 'Role Sales Orders', diff --git a/src/backend/InvenTree/users/permissions.py b/src/backend/InvenTree/users/permissions.py index 7c93f5ec97..c3d7c964b1 100644 --- a/src/backend/InvenTree/users/permissions.py +++ b/src/backend/InvenTree/users/permissions.py @@ -195,6 +195,11 @@ def check_user_permission( result = user.has_perm(permission_name) + # If the user does not have permissions (as determined above), check if the model class provides a custom permission check method + # This is required for non-standard models (i.e. defined via plugins), which do not have the required ruleset definitions + if not result and hasattr(model, 'check_user_permission'): # pragma: no cover + result = model.check_user_permission(user, permission) + # Save result to session-cache InvenTree.cache.set_session_cache(cache_key, result) diff --git a/src/backend/InvenTree/users/ruleset.py b/src/backend/InvenTree/users/ruleset.py index ed70b79b4d..272a30d452 100644 --- a/src/backend/InvenTree/users/ruleset.py +++ b/src/backend/InvenTree/users/ruleset.py @@ -12,6 +12,7 @@ class RuleSetEnum(StringEnum): ADMIN = 'admin' PART_CATEGORY = 'part_category' PART = 'part' + BOM = 'bom' STOCK_LOCATION = 'stock_location' STOCK = 'stock' BUILD = 'build' @@ -26,6 +27,7 @@ RULESET_CHOICES = [ (RuleSetEnum.ADMIN, _('Admin')), (RuleSetEnum.PART_CATEGORY, _('Part Categories')), (RuleSetEnum.PART, _('Parts')), + (RuleSetEnum.BOM, _('Bills of Material')), (RuleSetEnum.STOCK_LOCATION, _('Stock Locations')), (RuleSetEnum.STOCK, _('Stock Items')), (RuleSetEnum.BUILD, _('Build Orders')), @@ -94,6 +96,18 @@ def get_ruleset_models() -> dict: 'django_mailbox_messageattachment', 'django_mailbox_message', ], + RuleSetEnum.BOM: ['part_bomitem', 'part_bomitemsubstitute'], + RuleSetEnum.BUILD: [ + 'part_part', + 'part_partcategory', + 'part_bomitem', + 'part_bomitemsubstitute', + 'build_build', + 'build_builditem', + 'build_buildline', + 'stock_stockitem', + 'stock_stocklocation', + ], RuleSetEnum.PART_CATEGORY: [ 'part_partcategory', 'part_partcategoryparametertemplate', @@ -102,8 +116,6 @@ def get_ruleset_models() -> dict: RuleSetEnum.PART: [ 'part_part', 'part_partpricing', - 'part_bomitem', - 'part_bomitemsubstitute', 'part_partsellpricebreak', 'part_partinternalpricebreak', 'part_parttesttemplate', @@ -120,17 +132,6 @@ def get_ruleset_models() -> dict: 'stock_stockitemtracking', 'stock_stockitemtestresult', ], - RuleSetEnum.BUILD: [ - 'part_part', - 'part_partcategory', - 'part_bomitem', - 'part_bomitemsubstitute', - 'build_build', - 'build_builditem', - 'build_buildline', - 'stock_stockitem', - 'stock_stocklocation', - ], RuleSetEnum.PURCHASE_ORDER: [ 'company_company', 'company_contact', diff --git a/src/backend/InvenTree/users/test_api.py b/src/backend/InvenTree/users/test_api.py index c3acd2de0b..20cd9488d8 100644 --- a/src/backend/InvenTree/users/test_api.py +++ b/src/backend/InvenTree/users/test_api.py @@ -54,12 +54,16 @@ class UserAPITests(InvenTreeAPITestCase): url = reverse('api-build-list') response = self.options(url) actions = response.data['actions']['POST'] - issued_by = actions['issued_by'] - self.assertEqual(issued_by['pk_field'], 'pk') - self.assertEqual(issued_by['model'], 'user') - self.assertEqual(issued_by['api_url'], reverse('api-user-list')) - self.assertEqual(issued_by['default'], self.user.pk) + issued_by = actions['issued_by'] + self.assertTrue(issued_by['read_only']) + + project_code = actions['project_code'] + self.assertFalse(project_code['read_only']) + self.assertEqual(project_code['type'], 'related field') + self.assertEqual(project_code['model'], 'projectcode') + self.assertEqual(project_code['api_url'], reverse('api-project-code-list')) + self.assertEqual(project_code['pk_field'], 'pk') def test_user_api(self): """Tests for User API endpoints.""" diff --git a/src/backend/requirements-3.14.txt b/src/backend/requirements-3.14.txt index d02c74e54e..e8c8b7beb6 100644 --- a/src/backend/requirements-3.14.txt +++ b/src/backend/requirements-3.14.txt @@ -101,16 +101,16 @@ blessed==1.38.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -boto3==1.42.82 \ - --hash=sha256:6df9ca0f5047c6afe6bd42244d8e059cde69e2cdb719ebd68d52c7d7beb529b2 \ - --hash=sha256:804341c8197c556e8e7ceb82388ee120f319a4efbb9dc368f6059760a11cfc7d +boto3==1.42.90 \ + --hash=sha256:bafb5bb1dea262ac95f9afb1e415f06a9490f05cb203bdd897d0afdcd17733c6 \ + --hash=sha256:fde7f7bcad6ec8342d6bf18f56d118d0cb6df189310cfaf73e2eb6443b1cb418 # via # -c src/backend/requirements.txt # django-anymail # django-storages -botocore==1.42.82 \ - --hash=sha256:824dbb58c99d894f193ed1dd75cf59650e25c1b5adb9d3a66b39fdede46f259b \ - --hash=sha256:a2bfe8537e95462ec06a46cc29c327f84746722bb4ce106491bfd3af8075ceed +botocore==1.42.90 \ + --hash=sha256:234c39492cd3088acb021d999e3392a4d50238ae3e70b9d9ae1504c30d9009d1 \ + --hash=sha256:5c95504720346990adc8e3ae1023eb46f9409084b79688e4773ba7099c5fd3db # via # -c src/backend/requirements.txt # boto3 @@ -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 @@ -814,9 +814,9 @@ feedparser==6.0.12 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -fido2==2.1.1 \ - --hash=sha256:f1379f845870cc7fc64c7f07323c3ce41e8c96c37054e79e0acd5630b3fec5ac \ - --hash=sha256:f85c16c8084abf6530b6c6ec3a0cf8575943321842e06916686943a8b784182c +fido2==2.2.0 \ + --hash=sha256:0d8122e690096ad82afde42ac9d6433a4eeffda64084f36341ea02546b181dd1 \ + --hash=sha256:3587ccf0af7b71b5dd73f17e1dbec9f0fd157292f9163f02e7778f46d0d25fe5 # via # -c src/backend/requirements.txt # django-allauth @@ -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 @@ -1033,147 +1033,141 @@ jwcrypto==1.5.7 \ # 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.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 # via # -c src/backend/requirements.txt # python3-saml @@ -1473,9 +1467,9 @@ opentelemetry-util-http==0.61b0 \ # opentelemetry-instrumentation-django # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi -packaging==26.0 \ - --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ - --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 +packaging==26.1 \ + --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ + --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de # via # -c src/backend/requirements.txt # bleach @@ -1605,9 +1599,9 @@ pip-licenses==5.5.5 \ # 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.10.0 \ - --hash=sha256:4c5a48ba258c37024ec2505f7e8fd858525f5502784a2e1c8d415604af29f6ef \ - --hash=sha256:90005e959e1596c6e6c84c8b0ad383285b3e17011751cedd17f2ce8fcdfc86de +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 @@ -2095,9 +2089,9 @@ s3transfer==0.16.0 \ # via # -c src/backend/requirements.txt # boto3 -sentry-sdk==2.57.0 \ - --hash=sha256:4be8d1e71c32fb27f79c577a337ac8912137bba4bcbc64a4ec1da4d6d8dc5199 \ - --hash=sha256:812c8bf5ff3d2f0e89c82f5ce80ab3a6423e102729c4706af7413fd1eb480585 +sentry-sdk==2.58.0 \ + --hash=sha256:688d1c704ddecf382ea3326f21a67453d4caa95592d722b7c780a36a9d23109e \ + --hash=sha256:c1144d947352d54e5b7daa63596d9f848adf684989c06c4f5a659f0c85a18f6f # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -2377,9 +2371,9 @@ xmlsec==1.3.17 \ # -c src/backend/requirements.txt # -r src/backend/requirements.in # python3-saml -zipp==3.23.0 \ - --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ - --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 +zipp==3.23.1 \ + --hash=sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc \ + --hash=sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110 # via # -c src/backend/requirements.txt # importlib-metadata diff --git a/src/backend/requirements-dev-3.14.txt b/src/backend/requirements-dev-3.14.txt index b2de8b148b..c79f0453cf 100644 --- a/src/backend/requirements-dev-3.14.txt +++ b/src/backend/requirements-dev-3.14.txt @@ -7,9 +7,9 @@ asgiref==3.11.1 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # django -build==1.4.2 \ - --hash=sha256:35b14e1ee329c186d3f08466003521ed7685ec15ecffc07e68d706090bf161d1 \ - --hash=sha256:7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88 +build==1.4.3 \ + --hash=sha256:1bc22b19b383303de8f2c8554c9a32894a58d3f185fe3756b0b20d255bee9a38 \ + --hash=sha256:5aa4231ae0e807efdf1fd0623e07366eca2ab215921345a2e38acdd5d0fa0a74 # via pip-tools certifi==2026.2.25 \ --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ @@ -247,9 +247,9 @@ charset-normalizer==3.4.7 \ # -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 \ @@ -453,9 +453,9 @@ django-types==0.23.0 \ --hash=sha256:0727b13ae810c4b1f14eeac9872834ac928c99dc76584ea7c23afc4461e049dd \ --hash=sha256:f97fb746166fb15a5f40e470a1fd7a58226349aac9e0a9cb8ae81deb14d94fd0 # via -r src/backend/requirements-dev.in -filelock==3.25.2 \ - --hash=sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694 \ - --hash=sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 +filelock==3.28.0 \ + --hash=sha256:4ed1010aae813c4ee8d9c660e4792475ee60c4a0ba76073ceaf862bd317e3ca6 \ + --hash=sha256:de9af6712788e7171df1b28b15eba2446c69721433fa427a9bee07b17820a9db # via # python-discovery # virtualenv @@ -463,9 +463,9 @@ gprof2dot==2025.4.14 \ --hash=sha256:0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e \ --hash=sha256:35743e2d2ca027bf48fa7cba37021aaf4a27beeae1ae8e05a50b55f1f921a6ce # via django-silk -identify==2.6.18 \ - --hash=sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd \ - --hash=sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 +identify==2.6.19 \ + --hash=sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a \ + --hash=sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842 # via pre-commit idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ @@ -494,9 +494,9 @@ nodeenv==1.10.0 \ --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \ --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb # via pre-commit -packaging==26.0 \ - --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ - --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 +packaging==26.1 \ + --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ + --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -507,17 +507,17 @@ pdfminer-six==20260107 \ --hash=sha256:366585ba97e80dffa8f00cebe303d2f381884d8637af4ce422f1df3ef38111a9 \ --hash=sha256:96bfd431e3577a55a0efd25676968ca4ce8fd5b53f14565f85716ff363889602 # via -r src/backend/requirements-dev.in -pip==26.0.1 \ - --hash=sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b \ - --hash=sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8 +pip==26.1 \ + --hash=sha256:4e8486d821d814b77319acb7b9e8bf5a4ee7590a643e7cb21029f209be8573c1 \ + --hash=sha256:81e13ebcca3ffa8cc85e4deff5c27e1ee26dea0aa7fc2f294a073ac208806ff3 # via pip-tools pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -550,37 +550,37 @@ 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 -pytest-codspeed==4.3.0 \ - --hash=sha256:05baff2a61dc9f3e92b92b9c2ab5fb45d9b802438f5373073f5766a91319ed7a \ - --hash=sha256:10d19b48c9dc35b227a7ac863d4b3c58132256c2ba1aae3220aaddbf6f3f5f9a \ - --hash=sha256:34f2fd8497456eefbd325673f677ea80d93bb1bc08a578c1fa43a09cec3d1879 \ - --hash=sha256:5230d9d65f39063a313ed1820df775166227ec5c20a1122968f85653d5efee48 \ - --hash=sha256:527a3a02eaa3e4d4583adc4ba2327eef79628f3e1c682a4b959439551a72588e \ - --hash=sha256:619120775e92a3f43fb4ff4c256a251b1554c904d95e2154a382484283f0388a \ - --hash=sha256:6ac31ae566bf047e91c79b6d12d9a31efedad556ff9258294d6ecebeacb92fa4 \ - --hash=sha256:878aad5e4bb7b401ad8d82f3af5186030cd2bd0d0446782e10dabb9db8827466 \ - --hash=sha256:9858c2a6e1f391d5696757e7b6e9484749a7376c46f8b4dd9aebf093479a9667 \ - --hash=sha256:a2f5bb6d8898bea7db45e3c8b916ee48e36905b929477bb511b79c5a3ccacda4 \ - --hash=sha256:b2acecc4126658abebc683b38121adec405a46e18a619d49d6154c6e60c5deb2 \ - --hash=sha256:bec30f4fc9c4973143cd80f0d33fa780e9fa3e01e4dbe8cedf229e72f1212c62 \ - --hash=sha256:dbeff1eb2f2e36df088658b556fa993e6937bf64ffb07406de4db16fd2b26874 \ - --hash=sha256:df0d1f6ea594f29b745c634d66d5f5f1caa1c3abd2af82fea49d656038e8fc77 \ - --hash=sha256:df6a36a2a9da1406bc50428437f657f0bd8c842ae54bee5fb3ad30e01d50c0f5 \ - --hash=sha256:e6584e641cadf27d894ae90b87c50377232a97cbfd76ee0c7ecd0c056fa3f7f4 +pytest-codspeed==4.4.0 \ + --hash=sha256:06943110e7a8a4b54f4b13aaa3ff8db39caa02b2f61705916887649e36b9713a \ + --hash=sha256:215170441e57bfcbefd179dfd86ccd54ed0ee235e0602a068ce4448b35f13cb2 \ + --hash=sha256:29b1bf8a36e18d11641a5e610e23a94036b04185e3099978d81a873a5bd3635c \ + --hash=sha256:33c38e0e797c74506004f231fc53eab0e412987de281755f714018334381aa3a \ + --hash=sha256:340dbb1cc5a21434e0e29bd68ab03c7dc7ad9bfde09d1980b7161352c4c2f048 \ + --hash=sha256:413666266762f9cef1321ba971a9e127b97a1f1dad40ddfd2184c2bc5ac157f9 \ + --hash=sha256:4afa9455a9b198c5e898224c751182fcf53f67f11fb27c2c3346284da1baa018 \ + --hash=sha256:56d5dd94dcb69460f916acb9c69865d0171b98acec3ce256645d0c0275b553d7 \ + --hash=sha256:6a5c1d51e7ca72ffe247c99b9a97a54191185e8f7a27528e2200d7416da2a68b \ + --hash=sha256:83479a6719598d2910969a60cc410c7283c262c876422a9157dca2f2ab42fa1d \ + --hash=sha256:98524af4ddd6006ea064791bb15a43957d78fab040cb6f499ca73a369da373e6 \ + --hash=sha256:a6aab2fa73523f538e7729c20ccf4a1e8e921324c9877a816b05334135950fd9 \ + --hash=sha256:e258e6c3d5a8a02ae02a64831be3acd44c19210ffbf13321bdbb8c111c5c6fe4 \ + --hash=sha256:edb7c101d9c50439a42cf02cfa9c0ac92da618841636bbebf87c3fa54669442a \ + --hash=sha256:ee3e1964446011ca192eebf0350227df231a5b88af57e518f2a4328fc8ca5131 \ + --hash=sha256:f3ae6f4053042c3a9ae3b05416fb42253c5e514e89391eb25e9c9e3ac8de8677 # via -r src/backend/requirements-dev.in pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in -python-discovery==1.2.1 \ - --hash=sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e \ - --hash=sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 +python-discovery==1.2.2 \ + --hash=sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb \ + --hash=sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -671,9 +671,9 @@ requests-mock==1.12.1 \ --hash=sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563 \ --hash=sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401 # via -r src/backend/requirements-dev.in -rich==14.3.3 \ - --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ - --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich==15.0.0 \ + --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ + --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 # via pytest-codspeed setuptools==82.0.1 \ --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ @@ -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.4 \ + --hash=sha256:29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac \ + --hash=sha256:b294ef68192638004d72524ce7ef303e9d0cf5a44c95ce2e54a7500a6381cada # 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 34203e179f..f2062c6b3c 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -6,9 +6,9 @@ asgiref==3.11.1 \ # via # -c src/backend/requirements.txt # django -build==1.4.2 \ - --hash=sha256:35b14e1ee329c186d3f08466003521ed7685ec15ecffc07e68d706090bf161d1 \ - --hash=sha256:7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88 +build==1.4.3 \ + --hash=sha256:1bc22b19b383303de8f2c8554c9a32894a58d3f185fe3756b0b20d255bee9a38 \ + --hash=sha256:5aa4231ae0e807efdf1fd0623e07366eca2ab215921345a2e38acdd5d0fa0a74 # via pip-tools certifi==2026.2.25 \ --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ @@ -243,9 +243,9 @@ charset-normalizer==3.4.7 \ # -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 \ @@ -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 \ @@ -447,9 +447,9 @@ django-types==0.23.0 \ --hash=sha256:0727b13ae810c4b1f14eeac9872834ac928c99dc76584ea7c23afc4461e049dd \ --hash=sha256:f97fb746166fb15a5f40e470a1fd7a58226349aac9e0a9cb8ae81deb14d94fd0 # via -r src/backend/requirements-dev.in -filelock==3.25.2 \ - --hash=sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694 \ - --hash=sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 +filelock==3.28.0 \ + --hash=sha256:4ed1010aae813c4ee8d9c660e4792475ee60c4a0ba76073ceaf862bd317e3ca6 \ + --hash=sha256:de9af6712788e7171df1b28b15eba2446c69721433fa427a9bee07b17820a9db # via # python-discovery # virtualenv @@ -457,9 +457,9 @@ gprof2dot==2025.4.14 \ --hash=sha256:0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e \ --hash=sha256:35743e2d2ca027bf48fa7cba37021aaf4a27beeae1ae8e05a50b55f1f921a6ce # via django-silk -identify==2.6.18 \ - --hash=sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd \ - --hash=sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 +identify==2.6.19 \ + --hash=sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a \ + --hash=sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842 # via pre-commit idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ @@ -487,9 +487,9 @@ nodeenv==1.10.0 \ --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \ --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb # via pre-commit -packaging==26.0 \ - --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ - --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 +packaging==26.1 \ + --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ + --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de # via # -c src/backend/requirements.txt # build @@ -499,17 +499,17 @@ pdfminer-six==20260107 \ --hash=sha256:366585ba97e80dffa8f00cebe303d2f381884d8637af4ce422f1df3ef38111a9 \ --hash=sha256:96bfd431e3577a55a0efd25676968ca4ce8fd5b53f14565f85716ff363889602 # via -r src/backend/requirements-dev.in -pip==26.0.1 \ - --hash=sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b \ - --hash=sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8 +pip==26.1 \ + --hash=sha256:4e8486d821d814b77319acb7b9e8bf5a4ee7590a643e7cb21029f209be8573c1 \ + --hash=sha256:81e13ebcca3ffa8cc85e4deff5c27e1ee26dea0aa7fc2f294a073ac208806ff3 # via pip-tools pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.4 \ - --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ - --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 +platformdirs==4.9.6 \ + --hash=sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a \ + --hash=sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917 # via # -c src/backend/requirements.txt # python-discovery @@ -540,37 +540,37 @@ 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 -pytest-codspeed==4.3.0 \ - --hash=sha256:05baff2a61dc9f3e92b92b9c2ab5fb45d9b802438f5373073f5766a91319ed7a \ - --hash=sha256:10d19b48c9dc35b227a7ac863d4b3c58132256c2ba1aae3220aaddbf6f3f5f9a \ - --hash=sha256:34f2fd8497456eefbd325673f677ea80d93bb1bc08a578c1fa43a09cec3d1879 \ - --hash=sha256:5230d9d65f39063a313ed1820df775166227ec5c20a1122968f85653d5efee48 \ - --hash=sha256:527a3a02eaa3e4d4583adc4ba2327eef79628f3e1c682a4b959439551a72588e \ - --hash=sha256:619120775e92a3f43fb4ff4c256a251b1554c904d95e2154a382484283f0388a \ - --hash=sha256:6ac31ae566bf047e91c79b6d12d9a31efedad556ff9258294d6ecebeacb92fa4 \ - --hash=sha256:878aad5e4bb7b401ad8d82f3af5186030cd2bd0d0446782e10dabb9db8827466 \ - --hash=sha256:9858c2a6e1f391d5696757e7b6e9484749a7376c46f8b4dd9aebf093479a9667 \ - --hash=sha256:a2f5bb6d8898bea7db45e3c8b916ee48e36905b929477bb511b79c5a3ccacda4 \ - --hash=sha256:b2acecc4126658abebc683b38121adec405a46e18a619d49d6154c6e60c5deb2 \ - --hash=sha256:bec30f4fc9c4973143cd80f0d33fa780e9fa3e01e4dbe8cedf229e72f1212c62 \ - --hash=sha256:dbeff1eb2f2e36df088658b556fa993e6937bf64ffb07406de4db16fd2b26874 \ - --hash=sha256:df0d1f6ea594f29b745c634d66d5f5f1caa1c3abd2af82fea49d656038e8fc77 \ - --hash=sha256:df6a36a2a9da1406bc50428437f657f0bd8c842ae54bee5fb3ad30e01d50c0f5 \ - --hash=sha256:e6584e641cadf27d894ae90b87c50377232a97cbfd76ee0c7ecd0c056fa3f7f4 +pytest-codspeed==4.4.0 \ + --hash=sha256:06943110e7a8a4b54f4b13aaa3ff8db39caa02b2f61705916887649e36b9713a \ + --hash=sha256:215170441e57bfcbefd179dfd86ccd54ed0ee235e0602a068ce4448b35f13cb2 \ + --hash=sha256:29b1bf8a36e18d11641a5e610e23a94036b04185e3099978d81a873a5bd3635c \ + --hash=sha256:33c38e0e797c74506004f231fc53eab0e412987de281755f714018334381aa3a \ + --hash=sha256:340dbb1cc5a21434e0e29bd68ab03c7dc7ad9bfde09d1980b7161352c4c2f048 \ + --hash=sha256:413666266762f9cef1321ba971a9e127b97a1f1dad40ddfd2184c2bc5ac157f9 \ + --hash=sha256:4afa9455a9b198c5e898224c751182fcf53f67f11fb27c2c3346284da1baa018 \ + --hash=sha256:56d5dd94dcb69460f916acb9c69865d0171b98acec3ce256645d0c0275b553d7 \ + --hash=sha256:6a5c1d51e7ca72ffe247c99b9a97a54191185e8f7a27528e2200d7416da2a68b \ + --hash=sha256:83479a6719598d2910969a60cc410c7283c262c876422a9157dca2f2ab42fa1d \ + --hash=sha256:98524af4ddd6006ea064791bb15a43957d78fab040cb6f499ca73a369da373e6 \ + --hash=sha256:a6aab2fa73523f538e7729c20ccf4a1e8e921324c9877a816b05334135950fd9 \ + --hash=sha256:e258e6c3d5a8a02ae02a64831be3acd44c19210ffbf13321bdbb8c111c5c6fe4 \ + --hash=sha256:edb7c101d9c50439a42cf02cfa9c0ac92da618841636bbebf87c3fa54669442a \ + --hash=sha256:ee3e1964446011ca192eebf0350227df231a5b88af57e518f2a4328fc8ca5131 \ + --hash=sha256:f3ae6f4053042c3a9ae3b05416fb42253c5e514e89391eb25e9c9e3ac8de8677 # via -r src/backend/requirements-dev.in pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in -python-discovery==1.2.1 \ - --hash=sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e \ - --hash=sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 +python-discovery==1.2.2 \ + --hash=sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb \ + --hash=sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -659,9 +659,9 @@ requests-mock==1.12.1 \ --hash=sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563 \ --hash=sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401 # via -r src/backend/requirements-dev.in -rich==14.3.3 \ - --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ - --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b +rich==15.0.0 \ + --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \ + --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36 # via pytest-codspeed setuptools==82.0.1 \ --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ @@ -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.4 \ + --hash=sha256:29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac \ + --hash=sha256:b294ef68192638004d72524ce7ef303e9d0cf5a44c95ce2e54a7500a6381cada # via pre-commit wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index 640ab46e5a..b99296082f 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -95,15 +95,15 @@ blessed==1.38.0 \ --hash=sha256:89ce6ec6567f7aced0716b73577b7a1702eb23c667838bb46d7d9bd48c36d1b3 \ --hash=sha256:905884ae650e41284fa4fd7d0c3eed5e5b4a42be8c2bfb24c90d79fbf26a1490 # via -r src/backend/requirements.in -boto3==1.42.82 \ - --hash=sha256:6df9ca0f5047c6afe6bd42244d8e059cde69e2cdb719ebd68d52c7d7beb529b2 \ - --hash=sha256:804341c8197c556e8e7ceb82388ee120f319a4efbb9dc368f6059760a11cfc7d +boto3==1.42.90 \ + --hash=sha256:bafb5bb1dea262ac95f9afb1e415f06a9490f05cb203bdd897d0afdcd17733c6 \ + --hash=sha256:fde7f7bcad6ec8342d6bf18f56d118d0cb6df189310cfaf73e2eb6443b1cb418 # via # django-anymail # django-storages -botocore==1.42.82 \ - --hash=sha256:824dbb58c99d894f193ed1dd75cf59650e25c1b5adb9d3a66b39fdede46f259b \ - --hash=sha256:a2bfe8537e95462ec06a46cc29c327f84746722bb4ce106491bfd3af8075ceed +botocore==1.42.90 \ + --hash=sha256:234c39492cd3088acb021d999e3392a4d50238ae3e70b9d9ae1504c30d9009d1 \ + --hash=sha256:5c95504720346990adc8e3ae1023eb46f9409084b79688e4773ba7099c5fd3db # via # boto3 # s3transfer @@ -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 \ @@ -719,9 +719,9 @@ feedparser==6.0.12 \ --hash=sha256:64f76ce90ae3e8ef5d1ede0f8d3b50ce26bcce71dd8ae5e82b1cd2d4a5f94228 \ --hash=sha256:6bbff10f5a52662c00a2e3f86a38928c37c48f77b3c511aedcd51de933549324 # via -r src/backend/requirements.in -fido2==2.1.1 \ - --hash=sha256:f1379f845870cc7fc64c7f07323c3ce41e8c96c37054e79e0acd5630b3fec5ac \ - --hash=sha256:f85c16c8084abf6530b6c6ec3a0cf8575943321842e06916686943a8b784182c +fido2==2.2.0 \ + --hash=sha256:0d8122e690096ad82afde42ac9d6433a4eeffda64084f36341ea02546b181dd1 \ + --hash=sha256:3587ccf0af7b71b5dd73f17e1dbec9f0fd157292f9163f02e7778f46d0d25fe5 # via django-allauth flexcache==0.3 \ --hash=sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656 \ @@ -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 \ @@ -906,147 +906,141 @@ 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.1.0 \ + --hash=sha256:00750d63ef0031a05331b9223463b1c7c02b9004cef2346a5b2877f0f9494dd2 \ + --hash=sha256:022981127642fe19866d2907d76241bb07ed21749601f727d5d5dd1ce5d1b773 \ + --hash=sha256:045e387d1f4f42a418380930fa3f45c73c9b392faf67e495e58902e68e8f44a7 \ + --hash=sha256:05b9b8787e35bec69e68daf4952b2e6dfcfb0db7ecf1a06f8cdfbbac4eb71aad \ + --hash=sha256:07f98f5496f96bf724b1e3c933c107f0cbf2745db18c03d2e13a291c3afd2635 \ + --hash=sha256:08950a23f296b3f83521577274e3d3b0f3d739bf2e68d01a752e4288bc50d286 \ + --hash=sha256:0d082495c5fcf426e425a6e28daaba1fcb6d8f854a4ff01effb1f1f381203eb9 \ + --hash=sha256:0f0f08beb0182e3e9a86fae124b3c47a7b41b7b69b225e1377db983802404e54 \ + --hash=sha256:1081dd10bc6fa437db2500e13993abf7cc30716d0a2f40e65abb935f02ec559c \ + --hash=sha256:11a873c77a181b4fef9c2e357d08ed399542c2af1390101da66720a19c7c9618 \ + --hash=sha256:183bfb45a493081943be7ea2b5adfc2b611e1cf377cefa8b8a8be404f45ef9a7 \ + --hash=sha256:19f4164243fc206d12ed3d866e80e74f5bc3627966520da1a5f97e42c32a3f39 \ + --hash=sha256:1ae225f66e5938f4fa29d37e009a3bb3b13032ac57eb4eb42afa44f6e4054e69 \ + --hash=sha256:1bc4cc83fb7f66ffb16f74d6dd0162e144333fc36ebcce32246f80c8735b2551 \ + --hash=sha256:1dd6a1c3ad4cb674f44525d9957f3e9c209bb6dd9213245195167a281fcc2bdc \ + --hash=sha256:20cf4d0651987c906a2f5cba4e3a8d6ba4bfdf973cfe2a96c0d6053888ea2ecd \ + --hash=sha256:2173a7bffe97667bbf0767f8a99e587740a8c56fdf3befac4b09cb29a80276fd \ + --hash=sha256:21c3302068f50d1e8728c67c87ba92aa87043abee517aa2576cca1855326b405 \ + --hash=sha256:23a5dc68e08ed13331d61815c08f260f46b4a60fdd1640bbeb82cf89a9d90289 \ + --hash=sha256:23cad0cc86046d4222f7f418910e46b89971c5a45d3c8abfad0f64b7b05e4a9b \ + --hash=sha256:2593a0a6621545b9095b71ad74ed4226eba438a7d9fc3712a99bdb15508cf93a \ + --hash=sha256:264c605ab9c0e4aa1a679636f4582c4d3313700009fac3ec9c3412ed0d8f3e1d \ + --hash=sha256:26c5272c6a4bf4cf32d3f5a7890c942b0e04438691157d341616d02cca74d4bd \ + --hash=sha256:26dd9f57ee3bd41e7d35b4c98a2ffd89ed11591649f421f0ec19f67d50ec67ac \ + --hash=sha256:28902146ffbe5222df411c5d19e5352490122e14447e98cd118907ee3fd6ee62 \ + --hash=sha256:29f5c00cb7d752bce2c70ebd2d31b0a42f9499ffdd3ecb2f31a5b73ee43031ad \ + --hash=sha256:30e7b2ed63b6c8e97cca8af048589a788ab5c9c905f36d9cf1c2bb549f450d2f \ + --hash=sha256:32662519149fd7a9db354175aa5e417d83485a8039b8aaa62f873ceee7ea4cad \ + --hash=sha256:363e47283bde87051b821826e71dde47f107e08614e1aa312ba0c5711e77738c \ + --hash=sha256:3648f20d25102a22b6061c688beb3a805099ea4beb0a01ce62975d926944d292 \ + --hash=sha256:37448bf9c7d7adfc5254763901e2bbd6bb876228dfc1fc7f66e58c06368a7544 \ + --hash=sha256:37fabd1452852636cf38ecdcc9dd5ca4bba7a35d6c53fa09725deeb894a87491 \ + --hash=sha256:398443df51c538bd578529aa7e5f7afc6c292644174b47961f3bf87fe5741120 \ + --hash=sha256:3ae5d8d5427f3cc317e7950f2da7ad276df0cfa37b8de2f5658959e618ea8512 \ + --hash=sha256:3f00972f84450204cd5d93a5395965e348956aaceaadec693a22ec743f8ae3eb \ + --hash=sha256:40d9189f80075f2e1f88db21ef815a2b17b28adf8e50aaf5c789bfe737027f32 \ + --hash=sha256:419c58fc92cc3a2c3fa5f78c63dbf5da70c1fa9c1b25f25727ecee89a96c7de2 \ + --hash=sha256:41dcc4c7b10484257cbd6c37b83ddb26df2b0e5aff5ac00d095689015af868ec \ + --hash=sha256:43e4d297f11080ec9d64a4b1ad7ac02b4484c9f0e2179d9c4ef78e886e747b88 \ + --hash=sha256:45e9dfbd1b661eb64ba0d4dbe762bd210c42d86dd1e5bd2bdf89d634231beb43 \ + --hash=sha256:4642e04449a1e164b5ff71ffd901ddb772dfabf5c9adf1b7be5dffe1212bc037 \ + --hash=sha256:468479e52ecf3ec23799c863336d02c05fc2f7ffd1a1424eeeb9a28d4eb69d13 \ + --hash=sha256:47024feaae386a92a146af0d2aeed65229bf6fff738e6a11dda6b0015fb8fd03 \ + --hash=sha256:481d6e2104285d9add34f41b42b247b76b61c5b5c26c303c2e9707bbf8bd9a64 \ + --hash=sha256:4937460dc5df0cdd2f06a86c285c28afda06aefa3af949f9477d3e8df430c485 \ + --hash=sha256:4a1503c56e4e2b38dc76f2f2da7bae69670c0f1933e27cfa34b2fa5876410b16 \ + --hash=sha256:4b89b098105b8599dc57adac95d1813409ac476d3c948a498775d3d0c6124bfb \ + --hash=sha256:4bd1bdb8a9e0e2dd229de19b5f8aebac80e916921b4b2c6ef8a52bc131d0c1f9 \ + --hash=sha256:4e2c54d6b47361d0f1d3bc8d4e082ad87201e56ccdcca4d3b9ee3644ff595ec8 \ + --hash=sha256:52b0ac6903cf74ebf997eb8c682d2fbac7d1ab7e4c552413eec55868a9b73f39 \ + --hash=sha256:546b66c0dd1bb8d9fa89d7123e5fa19a8aff3a1f2141eb22df96112afb17b842 \ + --hash=sha256:56971379bc5ee8037c5a0f09fa88f66cdb7d37c3e38af3e45cf539f41131ac1f \ + --hash=sha256:5715e0e28736a070f3f34a7ccc09e2fdcba0e3060abbcf61a1a5718ff6d6b105 \ + --hash=sha256:5cfa1a34df366d9dc0d5eaf420f4cf2bb1e1bebe1066d1c2fc28c179f8a4004c \ + --hash=sha256:5d27bbe326c6b539c64b42638b18bc6003a8d88f76213a97ac9ed4f885efeab7 \ + --hash=sha256:6262b87f9e5c1e5fe501d6c153247289af42eb44ad7660b9b3de17baaf92d6f6 \ + --hash=sha256:63aeafc26aac0be8aff14af7871249e87ea1319be92090bfd632ec68e03b16a5 \ + --hash=sha256:690022c7fae793b0489aa68a658822cea83e0d5933781811cabbf5ea3bcfe73d \ + --hash=sha256:6fd8b1df8254ff4fd93fd31da1fc15770bde23ac045be9bb1f87425702f61cc9 \ + --hash=sha256:73becf6d8c81d4c76b1014dbd3584cb26d904492dcf73ca85dc8bff08dcd6d2d \ + --hash=sha256:73d658216fc173cf2c939e90e07b941c5e12736b0bf6a99e7af95459cfe8eabb \ + --hash=sha256:75c4c7c619a744f972f4451bf5adf6d0fb00992a1ffc9fd78e13b0bc817cc99f \ + --hash=sha256:76b958b4ea3104483c20f74866d55aa056546e15ebe83dd7aecd63698f43b755 \ + --hash=sha256:77b9f99b17cbf14026d1e618035077060fc7195dd940d025149f3e2e830fbfcb \ + --hash=sha256:7ba11752e346bd804ea312ec2eea2532dfa8b8d3261d81a32ef9e6ab16256280 \ + --hash=sha256:7da13bb6fbadfafb474e0226a30570a3445cfd47c86296f2446dafbd77079ace \ + --hash=sha256:7e39ab3a28af7784e206d8606ec0e4bcad0190f63a492bca95e94e5a4aef7f6e \ + --hash=sha256:7f4a77d6f7edf9230cee3e1f7f6764722a41604ee5681844f18db9a81ea0ec33 \ + --hash=sha256:80410c3a7e3c617af04de17caa9f9f20adaa817093293d69eae7d7d0522836f5 \ + --hash=sha256:81ff55c70b67d19d52b6fd118a114c0a4c97d799cd3089ff9bd9e2ff4b414ee2 \ + --hash=sha256:857efde87d365706590847b916baff69c0bc9252dc5af030e378c9800c0b10e3 \ + --hash=sha256:89e8d73d09ac696a5ba42ec69787913d53284f12092f651506779314f10ba585 \ + --hash=sha256:8c11b984b5ce6add4dccc7144c7be5d364d298f15b0c6a57da1991baedc750ce \ + --hash=sha256:8c8984e1d8c4b3949e419158fda14d921ff703a9ed8a47236c6eb7a2b6cb4946 \ + --hash=sha256:8e369cbd690e788c8d15e56222d91a09c6a417f49cbc543040cba0fe2e25a79e \ + --hash=sha256:9147d8e386ec3b82c3b15d88927f734f565b0aaadef7def562b853adca45784a \ + --hash=sha256:920354904d1cb86577d4b3cfe2830c2dbe81d6f4449e57ada428f1609b5985f7 \ + --hash=sha256:942454ff253da14218f972b23dc72fa4edf6c943f37edd19cd697618b626fac5 \ + --hash=sha256:972a6451204798675407beaad97b868d0c733d9a74dafefc63120b81b8c2de28 \ + --hash=sha256:976a6b39b1b13e8c354ad8d3f261f3a4ac6609518af91bdb5094760a08f132c4 \ + --hash=sha256:97faa0860e13b05b15a51fb4986421ef7a30f0b3334061c416e0981e9450ca4c \ + --hash=sha256:9c03e048b6ce8e77b09c734e931584894ecd58d08296804ca2d0b184c933ce50 \ + --hash=sha256:9e7b0a4ca6dcc007a4cef00a761bba2dea959de4bd2df98f926b33c92ca5dfb9 \ + --hash=sha256:9eb667bf50856c4a58145f8ca2d5e5be160191e79eb9e30855a476191b3c3495 \ + --hash=sha256:9f93d5b8b07f73e8c77e3c6556a3db269918390c804b5e5fcdd4858232cc8f16 \ + --hash=sha256:a0092f2b107b69601adf562a57c956fbb596e05e3e6651cabd3054113b007e45 \ + --hash=sha256:a02ca8fe48815bddcfca3248efe54451abb9dbf2f7d1c5744c8aa4142d476919 \ + --hash=sha256:a1d9b99e5b2597e4f5aed2484fef835256fa1b68a19e4265c97628ef4bf8bcf4 \ + --hash=sha256:a2853c8b2170cc6cd54a6b4d50d2c1a8a7aeca201f23804b4898525c7a152cfc \ + --hash=sha256:a31286dbb5e74c8e9a5344465b77ab4c5bd511a253b355b5ca2fae7e579fafec \ + --hash=sha256:a86f06f059e22a0d574990ee2df24ede03f7f3c68c1336293eee9536c4c776cd \ + --hash=sha256:ab863fd37458fed6456525f297d21239d987800c46e67da5ef04fc6b3dd93ac8 \ + --hash=sha256:ac4db068889f8772a4a698c5980ec302771bb545e10c4b095d4c8be26749616f \ + --hash=sha256:b6c2f225662bc5ad416bdd06f72ca301b31b39ce4261f0e0097017fc2891b940 \ + --hash=sha256:bb40648d96157f9081886defe13eac99253e663be969ff938a9289eff6e47b72 \ + --hash=sha256:bba078de0031c219e5dd06cf3e6bf8fb8e6e64a77819b358f53bb132e3e03366 \ + --hash=sha256:bc783ee3147e60a25aa0445ea82b3e8aabb83b240f2b95d32cb75587ff781814 \ + --hash=sha256:be10838781cb3be19251e276910cd508fe127e27c3242e50521521a0f3781690 \ + --hash=sha256:bfd57d8008c4965709a919c3e9a98f76c2c7cb319086b3d26858250620023b13 \ + --hash=sha256:c08da09dc003c9e8c70e06b53a11db6fb3b250c21c4236b03c7d7b443c318e7a \ + --hash=sha256:c3592631e652afa34999a088f98ba7dfc7d6aff0d535c410bea77a71743f3819 \ + --hash=sha256:c4a699432846df86cc3de502ee85f445ebad748a1c6021d445f3e514d2cd4b1c \ + --hash=sha256:c4e425db0c5445ef0ad56b0eec54f89b88b2d884656e536a90b2f52aecb4ca86 \ + --hash=sha256:c53fa3a5a52122d590e847a57ccf955557b9634a7f99ff5a35131321b0a85317 \ + --hash=sha256:c6854e9cf99c84beb004eecd7d3a3868ef1109bf2b1df92d7bc11e96a36c2180 \ + --hash=sha256:c748ebcb6877de89f48ab90ca96642ac458fff5dec291a2b9337cd4d0934e383 \ + --hash=sha256:c871299c595ee004d186f61840f0bfc4941aa3f17c8ba4a565ead7e4f4f820ee \ + --hash=sha256:cbd7b79cdcb4986ad78a2662625882747f09db5e4cd7b2ae178a88c9c51b3dfe \ + --hash=sha256:cc16682cc987a3da00aa56a3aa3075b08edb10d9b1e476938cfdbee8f3b67181 \ + --hash=sha256:cec05be8c876f92a5aa07b01d60bbb4d11cfbdd654cad0561c0d7b5c043a61b9 \ + --hash=sha256:d036ee7b99d5148072ac7c9b847193decdfeac633db350363f7bce4fff108f0e \ + --hash=sha256:d0d799ff958655781296ec870d5e2448e75150da2b3d07f13ff5b0c2c35beefd \ + --hash=sha256:d1392c569c032f78a11a25d1de1c43fff13294c793b39e19d84fade3045cbbc3 \ + --hash=sha256:d2f17a16cd8751e8eb233a7e41aecdf8e511712e00088bf9be455f604cd0d28d \ + --hash=sha256:d3829a6e6fd550a219564912d4002c537f65da4c6ae4e093cc34462f4fa027ad \ + --hash=sha256:d43aa26dcda363f21e79afa0668f5029ed7394b3bb8c92a6927a3d34e8b610ea \ + --hash=sha256:d6d8efe71429635f0559579092bb5e60560d7b9115ee38c4adbea35632e7fa24 \ + --hash=sha256:dabecc48db5f42ba348d1f5d5afdc54c6c4cc758e676926c7cd327045749517d \ + --hash=sha256:db88156fcf544cdbf0d95588051515cfdfd4c876fc66444eb98bceb5d6db76de \ + --hash=sha256:de550d129f18d8ab819651ffe4f38b1b713c7e116707de3c0c6400d0ef34fbc1 \ + --hash=sha256:e0af85773850417d994d019741239b901b22c6680206f46a34766926e466141d \ + --hash=sha256:e3c4f84b24a1fcba435157d111c4b755099c6ff00a3daee1ad281817de75ed11 \ + --hash=sha256:e3dd5fe19c9e0ac818a9c7f132a5e43c1339ec1cbbfecb1a938bd3a47875b7c9 \ + --hash=sha256:e69aa6805905807186eb00e66c6d97a935c928275182eb02ee40ba00da9623b2 \ + --hash=sha256:e80807d72f96b96ad5588cb85c75616e4f2795a7737d4630784c51497beb7776 \ + --hash=sha256:ebe33f4ec1b2de38ceb225a1749a2965855bffeef435ba93cd2d5d540783bf2f \ + --hash=sha256:f0cea5b1d3e6e77d71bd2b9972eb2446221a69dc52bb0b9c3c6f6e5700592d93 \ + --hash=sha256:f15401d8d3dbf239e23c818afc10c7207f7b95f9a307e092122b6f86dd43209a \ + --hash=sha256:f504d861d9f2a8f94020130adac88d66de93841707a23a86244263d1e54682f5 \ + --hash=sha256:fc46da94826188ed45cb53bd8e3fc076ae22675aea2087843d4735627f867c6d \ + --hash=sha256:fc7140d7a7386e6b545d41b7358f4d02b656d4053f5fa6859f92f4b9c2572c4d \ + --hash=sha256:fcf3da95e93349e0647d48d4b36a12783105bcc74cb0c416952f9988410846a3 \ + --hash=sha256:fe022f20bc4569ec66b63b3fb275a3d628d9d32da6326b2982584104db6d3086 \ + --hash=sha256:ffb34ea45a82dd637c2c97ae1bbb920850c1e59bcae79ce1c15af531d83e7215 # via # python3-saml # xmlsec @@ -1307,9 +1301,9 @@ opentelemetry-util-http==0.61b0 \ # opentelemetry-instrumentation-django # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi -packaging==26.0 \ - --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ - --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 +packaging==26.1 \ + --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ + --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de # via # bleach # gunicorn @@ -1429,9 +1423,9 @@ 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.10.0 \ - --hash=sha256:4c5a48ba258c37024ec2505f7e8fd858525f5502784a2e1c8d415604af29f6ef \ - --hash=sha256:90005e959e1596c6e6c84c8b0ad383285b3e17011751cedd17f2ce8fcdfc86de +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 \ @@ -1873,9 +1867,9 @@ s3transfer==0.16.0 \ --hash=sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe \ --hash=sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920 # via boto3 -sentry-sdk==2.57.0 \ - --hash=sha256:4be8d1e71c32fb27f79c577a337ac8912137bba4bcbc64a4ec1da4d6d8dc5199 \ - --hash=sha256:812c8bf5ff3d2f0e89c82f5ce80ab3a6423e102729c4706af7413fd1eb480585 +sentry-sdk==2.58.0 \ + --hash=sha256:688d1c704ddecf382ea3326f21a67453d4caa95592d722b7c780a36a9d23109e \ + --hash=sha256:c1144d947352d54e5b7daa63596d9f848adf684989c06c4f5a659f0c85a18f6f # via # -r src/backend/requirements.in # django-q-sentry @@ -2126,9 +2120,9 @@ xmlsec==1.3.17 \ # via # -r src/backend/requirements.in # python3-saml -zipp==3.23.0 \ - --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ - --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 +zipp==3.23.1 \ + --hash=sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc \ + --hash=sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110 # via importlib-metadata zopfli==0.4.1 \ --hash=sha256:02086247dd12fda929f9bfe8b3962b6bcdbfc8c82e99255aebcf367867cf0760 \ diff --git a/src/frontend/CHANGELOG.md b/src/frontend/CHANGELOG.md index 7fd7be38d5..de7a54ed88 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.3 - April 2026 + +Exposes additional type definitions related to rendering drawers from tables: +- `DetailDrawer` +- `TableState` + +Also exposes `StylishText`, which is required downstream for rendering the DetailDrawer component, and is used in a number of places within the InvenTree UI. + +### 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. diff --git a/src/frontend/src/components/Boundary.tsx b/src/frontend/lib/components/Boundary.tsx similarity index 73% rename from src/frontend/src/components/Boundary.tsx rename to src/frontend/lib/components/Boundary.tsx index b96ec01108..38b858f696 100644 --- a/src/frontend/src/components/Boundary.tsx +++ b/src/frontend/lib/components/Boundary.tsx @@ -1,5 +1,5 @@ import { t } from '@lingui/core/macro'; -import { Alert } from '@mantine/core'; +import { Alert, Stack } from '@mantine/core'; import { ErrorBoundary, type FallbackRender } from '@sentry/react'; import { IconExclamationCircle } from '@tabler/icons-react'; import { type ReactNode, useCallback } from 'react'; @@ -11,9 +11,12 @@ export function DefaultFallback({ } - title={`${t`Error rendering component`}: ${title}`} + title={`INVE-E17: ${t`Error rendering component`}: ${title}`} > - {t`An error occurred while rendering this component. Refer to the console for more information.`} + + {t`An error occurred while rendering this component. Refer to the console for more information.`} + {t`Try reloading the page, or contact your administrator if the problem persists.`} + ); } 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/components/items/StylishText.tsx b/src/frontend/lib/components/StylishText.tsx similarity index 100% rename from src/frontend/src/components/items/StylishText.tsx rename to src/frontend/lib/components/StylishText.tsx 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/src/components/nav/DetailDrawer.css.ts b/src/frontend/lib/components/nav/DetailDrawer.css.ts similarity index 100% rename from src/frontend/src/components/nav/DetailDrawer.css.ts rename to src/frontend/lib/components/nav/DetailDrawer.css.ts diff --git a/src/frontend/src/components/nav/DetailDrawer.tsx b/src/frontend/lib/components/nav/DetailDrawer.tsx similarity index 90% rename from src/frontend/src/components/nav/DetailDrawer.tsx rename to src/frontend/lib/components/nav/DetailDrawer.tsx index dcc7d77e6a..d2d2b0d2d1 100644 --- a/src/frontend/src/components/nav/DetailDrawer.tsx +++ b/src/frontend/lib/components/nav/DetailDrawer.tsx @@ -4,10 +4,11 @@ import { useCallback, useMemo } from 'react'; import { Link, Route, Routes, useNavigate, useParams } from 'react-router-dom'; import type { To } from 'react-router-dom'; -import type { UiSizeType } from '@lib/types/Core'; +import type { UiSizeType } from '../../types/Core'; + import { useShallow } from 'zustand/react/shallow'; -import { useLocalState } from '../../states/LocalState'; -import { StylishText } from '../items/StylishText'; +import { useLocalLibState } from '../../states/LocalLibState'; +import { StylishText } from '../StylishText'; import * as classes from './DetailDrawer.css'; /** @@ -38,7 +39,7 @@ function DetailDrawerComponent({ const content = renderContent(id); const opened = useMemo(() => !!id && !!content, [id, content]); - const [detailDrawerStack, addDetailDrawer] = useLocalState( + const [detailDrawerStack, addDetailDrawer] = useLocalLibState( useShallow((state) => [state.detailDrawerStack, state.addDetailDrawer]) ); @@ -91,7 +92,7 @@ export function DetailDrawerLink({ to, text }: Readonly<{ to: To; text: string }>) { - const addDetailDrawer = useLocalState( + const addDetailDrawer = useLocalLibState( useShallow((state) => state.addDetailDrawer) ); diff --git a/src/frontend/lib/enums/ApiEndpoints.tsx b/src/frontend/lib/enums/ApiEndpoints.tsx index 8a1a80ad73..addb35378b 100644 --- a/src/frontend/lib/enums/ApiEndpoints.tsx +++ b/src/frontend/lib/enums/ApiEndpoints.tsx @@ -153,6 +153,7 @@ export enum ApiEndpoints { stock_merge = 'stock/merge/', stock_assign = 'stock/assign/', stock_status = 'stock/status/', + stock_convert = 'stock/:id/convert/', stock_install = 'stock/:id/install/', stock_uninstall = 'stock/:id/uninstall/', stock_serialize = 'stock/:id/serialize/', diff --git a/src/frontend/lib/enums/ModelType.tsx b/src/frontend/lib/enums/ModelType.tsx index ea85b542fc..191d04545e 100644 --- a/src/frontend/lib/enums/ModelType.tsx +++ b/src/frontend/lib/enums/ModelType.tsx @@ -38,3 +38,16 @@ export enum ModelType { selectionentry = 'selectionentry', error = 'error' } + +export enum PluginPanelKey { + // settings / admin + admincenter = 'admincenter', + systemsettings = 'systemsettings', + usersettings = 'usersettings', + // generic + core = 'core', + // landing pages + purchasing = 'purchasing', + sales = 'sales', + manufacturing = 'manufacturing' +} diff --git a/src/frontend/lib/enums/Roles.tsx b/src/frontend/lib/enums/Roles.tsx index efa6c4a04b..0f5aedd94c 100644 --- a/src/frontend/lib/enums/Roles.tsx +++ b/src/frontend/lib/enums/Roles.tsx @@ -5,6 +5,7 @@ import { t } from '@lingui/core/macro'; */ export enum UserRoles { admin = 'admin', + bom = 'bom', build = 'build', part = 'part', part_category = 'part_category', 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..e6a6327f7d 100644 --- a/src/frontend/lib/index.ts +++ b/src/frontend/lib/index.ts @@ -15,10 +15,28 @@ 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, + TableState, + InvenTreeTableProps, + InvenTreeTableRenderProps +} from './types/Tables'; + +export type { + TableFilterChoice, + TableFilterType, + TableFilter, + FilterSetState +} from './types/Filters'; export type { ApiFormFieldChoice, @@ -42,6 +60,14 @@ export { getDetailUrl, navigateToLink } from './functions/Navigation'; + +export { + notYetImplemented, + permissionDenied, + invalidResponse, + showTimeoutNotification +} from './functions/Notification'; + export { checkPluginVersion, initPlugin @@ -53,16 +79,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 +119,28 @@ 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'; + +export { + type DrawerProps, + DetailDrawer, + DetailDrawerLink +} from './components/nav/DetailDrawer'; +export { StylishText } from './components/StylishText'; + +// State management +export { + type StoredTableStateProps, + useStoredTableState +} from './states/StoredTableState'; diff --git a/src/frontend/lib/states/LocalLibState.tsx b/src/frontend/lib/states/LocalLibState.tsx new file mode 100644 index 0000000000..76431c8d79 --- /dev/null +++ b/src/frontend/lib/states/LocalLibState.tsx @@ -0,0 +1,23 @@ +import { create } from 'zustand'; +import { persist } from 'zustand/middleware'; + +export const useLocalLibState = create()( + persist( + (set, get) => ({ + detailDrawerStack: 0, + addDetailDrawer: (value) => { + set({ + detailDrawerStack: + value === false ? 0 : get().detailDrawerStack + value + }); + } + }), + { + name: 'session-settings-inventreedb_lib' + } + ) +); +export interface LocalLibStateProps { + detailDrawerStack: number; + addDetailDrawer: (value: number | false) => void; +} 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 2b229dcb45..44e37a2b2f 100644 --- a/src/frontend/lib/types/Forms.tsx +++ b/src/frontend/lib/types/Forms.tsx @@ -37,7 +37,6 @@ export type ApiFormFieldHeader = { * - All other attributes are optional, and may be provided by the API * - However, they can be overridden by the user * - * @param name : The name of the field * @param label : The label to display for the field * @param value : The value of the field * @param default : The default value of the field @@ -46,16 +45,21 @@ export type ApiFormFieldHeader = { * @param api_url : The API endpoint to fetch data from (for related fields) * @param pk_field : The primary key field for the related field (default = "pk") * @param model : The model to use for related fields + * @param modelRenderer : Optional function to render the related model instance (for related fields) * @param filters : Optional API filters to apply to related fields + * @param child: Optional definition of a child field (for nested objects) + * @param children: Optional definitions of child fields (for nested objects with multiple fields) * @param required : Whether the field is required - * @param allow_null: Whether the field allows null values - * @param allow_blank: Whether the field allows blank values + * @param error : Optional error message to display * @param hidden : Whether the field is hidden * @param disabled : Whether the field is disabled - * @param error : Optional error message to display + * @param allow_null: Whether the field allows null values + * @param allow_blank: Whether the field allows blank values * @param exclude : Whether to exclude the field from the submitted data + * @param read_only : Whether the field is read-only * @param placeholder : The placeholder text to display * @param placeholderAutofill: Whether to allow auto-filling of the placeholder value + * @param addCreateFields : Fields to display when creating a new related object (for related fields) * @param description : The description to display for the field * @param preFieldContent : Content to render before the field * @param postFieldContent : Content to render after the field @@ -63,11 +67,11 @@ export type ApiFormFieldHeader = { * @param rightSection : Content to render in the right section of the field * @param autoFill: Whether to automatically fill the field with data from the API * @param autoFillFilters: Optional filters to apply when auto-filling the field + * @param adjustValue : Callback function to adjust the value of the field before it is sent to the API * @param onValueChange : Callback function to call when the field value changes * @param adjustFilters : Callback function to adjust the filters for a related field before a query is made - * @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 headers : Optional definitions of table headers (for table fields) * @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 = { @@ -114,6 +118,7 @@ export type ApiFormFieldType = { placeholderAutofill?: boolean; placeholderWarningCompare?: string | number; placeholderWarning?: string; + addCreateFields?: ApiFormFieldSet; description?: string; preFieldContent?: JSX.Element; postFieldContent?: JSX.Element; diff --git a/src/frontend/lib/types/Plugins.tsx b/src/frontend/lib/types/Plugins.tsx index 840d695d6d..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,6 +49,10 @@ 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; @@ -61,20 +66,22 @@ export type ImporterDrawerContext = { * * @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 forms - A set of functions for opening various API forms (see ../components/Forms.tsx) - * @param importer - A set of functions for controlling the global importer drawer (see ../components/importer/GlobalImporterDrawer.tsx) - * @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 @@ -95,9 +102,10 @@ export type InvenTreePluginContext = { locale: string; navigate: NavigateFunction; theme: MantineTheme; - forms: InvenTreeFormsContext; - importer: ImporterDrawerContext; 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..798b72329d 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; @@ -183,6 +179,7 @@ export type RowViewProps = RowAction & RowModelProps; * @param onRowClick : (record: any, index: number, event: any) => void - Callback function when a row is clicked * @param onCellClick : (event: any, record: any, index: number, column: any, columnIndex: number) => void - Callback function when a cell is clicked * @param modelType: ModelType - The model type for the table + * @param height: string | number - Height of the table (default = 'auto') * @param minHeight: number - Minimum height of the table (default 300px) * @param noHeader: boolean - Hide the table header */ @@ -216,6 +213,22 @@ export type InvenTreeTableProps = { rowStyle?: (record: T, index: number) => MantineStyleProp | undefined; modelField?: string; onCellContextMenu?: (record: T, event: any) => void; + height?: string | number; 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 9e588afb9c..132cd11437 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.10.1", + "version": "0.11.3", "private": false, "type": "module", "license": "MIT", @@ -84,7 +84,8 @@ "codemirror": "^6.0.2", "dayjs": "^1.11.13", "dompurify": "^3.2.4", - "easymde": "^2.18.0", + "easymde": "^2.20.0", + "embla-carousel": "^8.5.2", "embla-carousel-react": "^8.5.2", "fuse.js": "^7.0.0", "html5-qrcode": "^2.3.8", @@ -102,6 +103,7 @@ "react-window": "1.8.11", "recharts": "^3.1.2", "styled-components": "^6.1.14", + "undici": "^6.24.0", "zustand": "^5.0.8" }, "devDependencies": { @@ -130,13 +132,14 @@ "rollup": "^4.59.0", "rollup-plugin-license": "^3.7.0", "typescript": "^5.9.3", - "vite": "7.3.2", + "vite": "^6.4.2", "vite-plugin-babel-macros": "^1.0.6", "vite-plugin-dts": "^4.5.4", "vite-plugin-externals": "^0.6.2", "vite-plugin-istanbul": "^8.0.0" }, "resolutions": { - "undici": "^6.24.0" + "undici": "^6.24.0", + "vite": "^6.4.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/BarcodeScanDialog.tsx b/src/frontend/src/components/barcodes/BarcodeScanDialog.tsx index 6e2eb50640..1e3cbce14e 100644 --- a/src/frontend/src/components/barcodes/BarcodeScanDialog.tsx +++ b/src/frontend/src/components/barcodes/BarcodeScanDialog.tsx @@ -1,3 +1,4 @@ +import { StylishText } from '@lib/components/StylishText'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import type { ModelType } from '@lib/enums/ModelType'; @@ -11,7 +12,6 @@ import { type NavigateFunction, useNavigate } from 'react-router-dom'; import { api } from '../../App'; import { extractErrorMessage } from '../../functions/api'; import { useUserState } from '../../states/UserState'; -import { StylishText } from '../items/StylishText'; import { BarcodeInput } from './BarcodeInput'; export type BarcodeScanResult = { 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..a6cdb022f1 100644 --- a/src/frontend/src/components/calendar/Calendar.tsx +++ b/src/frontend/src/components/calendar/Calendar.tsx @@ -5,7 +5,9 @@ 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 { StylishText } from '@lib/components/StylishText'; import type { TableFilter } from '@lib/types/Filters'; import { t } from '@lingui/core/macro'; import { @@ -36,8 +38,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 { enableDownload?: boolean; diff --git a/src/frontend/src/components/dashboard/DashboardLayout.tsx b/src/frontend/src/components/dashboard/DashboardLayout.tsx index 5edcf5cc26..ddccb3034c 100644 --- a/src/frontend/src/components/dashboard/DashboardLayout.tsx +++ b/src/frontend/src/components/dashboard/DashboardLayout.tsx @@ -97,11 +97,14 @@ export default function DashboardLayout() { setWidgets([...widgets, newWidget]); } - // Update the layouts to include the new widget (and enforce initial size) + // Update the layouts to include the new widget. + // Pass overrideSize=false so existing widgets keep their user-set + // dimensions; only the newly added widget will receive default sizing + // via react-grid-layout's auto-placement. const _layouts: any = { ...layouts }; Object.keys(_layouts).forEach((key) => { - _layouts[key] = updateLayoutForWidget(_layouts[key], widgets, true); + _layouts[key] = updateLayoutForWidget(_layouts[key], widgets, false); }); setLayouts(_layouts); diff --git a/src/frontend/src/components/dashboard/DashboardMenu.tsx b/src/frontend/src/components/dashboard/DashboardMenu.tsx index 04dd8780d6..f961cca4ce 100644 --- a/src/frontend/src/components/dashboard/DashboardMenu.tsx +++ b/src/frontend/src/components/dashboard/DashboardMenu.tsx @@ -17,9 +17,9 @@ import { } from '@tabler/icons-react'; import { useMemo } from 'react'; +import { StylishText } from '@lib/components/StylishText'; import useInstanceName from '../../hooks/UseInstanceName'; import { useUserState } from '../../states/UserState'; -import { StylishText } from '../items/StylishText'; /** * A menu for editing the dashboard layout 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/dashboard/DashboardWidgetDrawer.tsx b/src/frontend/src/components/dashboard/DashboardWidgetDrawer.tsx index a3c9e69797..397111102e 100644 --- a/src/frontend/src/components/dashboard/DashboardWidgetDrawer.tsx +++ b/src/frontend/src/components/dashboard/DashboardWidgetDrawer.tsx @@ -15,8 +15,8 @@ import { useDebouncedValue } from '@mantine/hooks'; import { IconBackspace, IconLayoutGridAdd } from '@tabler/icons-react'; import { useMemo, useState } from 'react'; +import { StylishText } from '@lib/components/StylishText'; import { useDashboardItems } from '../../hooks/UseDashboardItems'; -import { StylishText } from '../items/StylishText'; /** * Drawer allowing the user to add new widgets to the dashboard. diff --git a/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx b/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx index 7b2352a18f..979d4d0f6c 100644 --- a/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx +++ b/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx @@ -9,6 +9,7 @@ import GetStartedWidget from './widgets/GetStartedWidget'; import LanguageSelectDashboardWidget from './widgets/LanguageSelectWidget'; import NewsWidget from './widgets/NewsWidget'; import QueryCountDashboardWidget from './widgets/QueryCountDashboardWidget'; +import QueryDashboardWidget from './widgets/QueryDashboardWidget'; import StocktakeDashboardWidget from './widgets/StocktakeDashboardWidget'; /** @@ -48,7 +49,15 @@ function BuiltinQueryCountWidgets(): DashboardWidgetProps[] { bom_valid: false // Only show parts with invalid BOMs } }), - // TODO: 'latest parts' + QueryDashboardWidget({ + label: 'latest-parts', + title: t`Latest parts`, + description: t`Latest parts`, + modelType: ModelType.part, + params: { + ordering: '-id' + } + }), // TODO: 'recently updated stock' QueryCountDashboardWidget({ title: t`Low Stock`, diff --git a/src/frontend/src/components/dashboard/widgets/ColorToggleWidget.tsx b/src/frontend/src/components/dashboard/widgets/ColorToggleWidget.tsx index cc2c718e93..06d451e1f2 100644 --- a/src/frontend/src/components/dashboard/widgets/ColorToggleWidget.tsx +++ b/src/frontend/src/components/dashboard/widgets/ColorToggleWidget.tsx @@ -1,8 +1,8 @@ import { t } from '@lingui/core/macro'; import { Group } from '@mantine/core'; +import { StylishText } from '@lib/components/StylishText'; import { ColorToggle } from '../../items/ColorToggle'; -import { StylishText } from '../../items/StylishText'; import type { DashboardWidgetProps } from '../DashboardWidget'; function ColorToggleWidget(title: string) { diff --git a/src/frontend/src/components/dashboard/widgets/GetStartedWidget.tsx b/src/frontend/src/components/dashboard/widgets/GetStartedWidget.tsx index d1e1263026..4f083d627e 100644 --- a/src/frontend/src/components/dashboard/widgets/GetStartedWidget.tsx +++ b/src/frontend/src/components/dashboard/widgets/GetStartedWidget.tsx @@ -2,10 +2,10 @@ import { t } from '@lingui/core/macro'; import { Stack } from '@mantine/core'; import { useMemo } from 'react'; +import { StylishText } from '@lib/components/StylishText'; import { DocumentationLinks } from '../../../defaults/links'; import { GettingStartedCarousel } from '../../items/GettingStartedCarousel'; import type { MenuLinkItem } from '../../items/MenuLinks'; -import { StylishText } from '../../items/StylishText'; export default function GetStartedWidget() { const docLinks: MenuLinkItem[] = useMemo(() => DocumentationLinks(), []); diff --git a/src/frontend/src/components/dashboard/widgets/LanguageSelectWidget.tsx b/src/frontend/src/components/dashboard/widgets/LanguageSelectWidget.tsx index cc33098de3..7f94231b4b 100644 --- a/src/frontend/src/components/dashboard/widgets/LanguageSelectWidget.tsx +++ b/src/frontend/src/components/dashboard/widgets/LanguageSelectWidget.tsx @@ -1,8 +1,8 @@ import { t } from '@lingui/core/macro'; import { Stack } from '@mantine/core'; +import { StylishText } from '@lib/components/StylishText'; import { LanguageSelect } from '../../items/LanguageSelect'; -import { StylishText } from '../../items/StylishText'; import type { DashboardWidgetProps } from '../DashboardWidget'; function LanguageSelectWidget(title: string) { diff --git a/src/frontend/src/components/dashboard/widgets/NewsWidget.tsx b/src/frontend/src/components/dashboard/widgets/NewsWidget.tsx index e7ebac756a..5dab794dce 100644 --- a/src/frontend/src/components/dashboard/widgets/NewsWidget.tsx +++ b/src/frontend/src/components/dashboard/widgets/NewsWidget.tsx @@ -14,12 +14,12 @@ import { IconMailCheck } from '@tabler/icons-react'; import { useQuery } from '@tanstack/react-query'; import { useCallback, useMemo } from 'react'; +import { StylishText } from '@lib/components/StylishText'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; import { api } from '../../../App'; import { formatDate } from '../../../defaults/formatters'; import { useUserState } from '../../../states/UserState'; -import { StylishText } from '../../items/StylishText'; /** * Render a link to an external news item diff --git a/src/frontend/src/components/dashboard/widgets/QueryCountDashboardWidget.tsx b/src/frontend/src/components/dashboard/widgets/QueryCountDashboardWidget.tsx index af38a5ce88..fa531ce69e 100644 --- a/src/frontend/src/components/dashboard/widgets/QueryCountDashboardWidget.tsx +++ b/src/frontend/src/components/dashboard/widgets/QueryCountDashboardWidget.tsx @@ -4,6 +4,7 @@ import { useQuery } from '@tanstack/react-query'; import { type ReactNode, useCallback, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; +import { StylishText } from '@lib/components/StylishText'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import type { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; @@ -13,7 +14,6 @@ import { useDocumentVisibility } from '@mantine/hooks'; import { useApi } from '../../../contexts/ApiContext'; import { InvenTreeIcon } from '../../../functions/icons'; import { useUserState } from '../../../states/UserState'; -import { StylishText } from '../../items/StylishText'; import type { DashboardWidgetProps } from '../DashboardWidget'; /** diff --git a/src/frontend/src/components/dashboard/widgets/QueryDashboardWidget.tsx b/src/frontend/src/components/dashboard/widgets/QueryDashboardWidget.tsx new file mode 100644 index 0000000000..527041c50a --- /dev/null +++ b/src/frontend/src/components/dashboard/widgets/QueryDashboardWidget.tsx @@ -0,0 +1,96 @@ +import { Anchor, Group } from '@mantine/core'; +import { type ReactNode, useCallback } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { StylishText } from '@lib/components/StylishText'; +import { ModelInformationDict } from '@lib/enums/ModelInformation'; +import type { ModelType } from '@lib/enums/ModelType'; +import { navigateToLink } from '@lib/functions/Navigation'; +import type { InvenTreeIconType } from '@lib/types/Icons'; +import { InvenTreeIcon } from '../../../functions/icons'; +import type { DashboardWidgetProps } from '../DashboardWidget'; + +/** + * A simple dashboard widget for displaying a link to a particular query + */ +function QueryWidget({ + modelType, + title, + icon, + params +}: Readonly<{ + modelType: ModelType; + title: string; + icon?: keyof InvenTreeIconType; + params: any; +}>): ReactNode { + const navigate = useNavigate(); + const modelProperties = ModelInformationDict[modelType]; + + const onFollowLink = useCallback( + (event: any) => { + if (modelProperties.url_overview) { + let url = modelProperties.url_overview; + + if (params) { + url += '?'; + for (const key in params) { + url += `${key}=${params[key]}&`; + } + } + + navigateToLink(url, navigate, event); + } + }, + [modelProperties, params] + ); + + return ( + + + + + {title} + + + + ); +} + +/** + * Construct a dashboard widget descriptor, which displays just a link to a particular query + */ +export default function QueryDashboardWidget({ + label, + title, + description, + modelType, + enabled = true, + params +}: { + label: string; + title: string; + description: string; + modelType: ModelType; + enabled?: boolean; + params: any; +}): DashboardWidgetProps { + return { + label: label, + title: title, + description: description, + enabled: enabled, + modelType: modelType, + minWidth: 2, + minHeight: 1, + render: () => ( + + ) + }; +} diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index 9222814fa4..d221ea543d 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -17,7 +17,9 @@ 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 { StylishText } from '@lib/components/StylishText'; import { YesNoButton } from '@lib/components/YesNoButton'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; @@ -29,8 +31,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/details/DetailsImage.tsx b/src/frontend/src/components/details/DetailsImage.tsx index 2df961ff35..044406e5c7 100644 --- a/src/frontend/src/components/details/DetailsImage.tsx +++ b/src/frontend/src/components/details/DetailsImage.tsx @@ -22,6 +22,7 @@ import { modals } from '@mantine/modals'; import { useEffect, useMemo, useState } from 'react'; import { ActionButton } from '@lib/components/ActionButton'; +import { StylishText } from '@lib/components/StylishText'; import type { UserRoles } from '@lib/enums/Roles'; import { cancelEvent } from '@lib/functions/Events'; import { showNotification } from '@mantine/notifications'; @@ -34,7 +35,6 @@ import { useUserState } from '../../states/UserState'; import { PartThumbTable } from '../../tables/part/PartThumbTable'; import { vars } from '../../theme'; import { ApiImage } from '../images/ApiImage'; -import { StylishText } from '../items/StylishText'; /** * Props for detail image @@ -42,6 +42,7 @@ import { StylishText } from '../items/StylishText'; export type DetailImageProps = { appRole?: UserRoles; src: string; + thumbnail?: string; apiPath: string; refresh?: () => void; imageActions?: DetailImageButtonProps; @@ -465,7 +466,7 @@ export function DetailsImage(props: Readonly) { const expandImage = (event: any) => { cancelEvent(event); modals.open({ - children: , + children: , withCloseButton: false }); }; @@ -484,6 +485,7 @@ export function DetailsImage(props: Readonly) { <> 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/ApiFormField.tsx b/src/frontend/src/components/forms/fields/ApiFormField.tsx index 05c2032b96..d1877347dd 100644 --- a/src/frontend/src/components/forms/fields/ApiFormField.tsx +++ b/src/frontend/src/components/forms/fields/ApiFormField.tsx @@ -246,11 +246,6 @@ export function ApiFormField({ /> ); default: - // This should never happen - it represents a critical UI issue which should be caught in CI - console.error( - `Invalid field type for field '${fieldName}': '${fieldDefinition.field_type}'` - ); - return ( Invalid field type for field '{fieldName}': ' diff --git a/src/frontend/src/components/forms/fields/RelatedModelField.tsx b/src/frontend/src/components/forms/fields/RelatedModelField.tsx index df711af1c1..e04ea1562a 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; @@ -139,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) { @@ -296,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)) { @@ -388,6 +410,7 @@ export function RelatedModelField({ const fieldDefinition = useMemo(() => { return { ...definition, + addCreateFields: undefined, autoFill: undefined, modelRenderer: undefined, onValueChange: undefined, @@ -461,6 +484,14 @@ export function RelatedModelField({ styles={{ description: { paddingBottom: '5px' } }} > + {addButton && modelInfo && ( + + )} setDisplayMode(value as any)} + data={[ + { value: 'all', label: t`Show all Parts` }, + { value: 'different', label: t`Show different Parts` }, + { value: 'common', label: t`Show common Parts` } + ]} + /> + + + {secondaryPartId ? ( + + ) : ( + {t`Select an assembly to view Bill of Materials comparison`} + )} + + + ); +} diff --git a/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx b/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx index e932431965..9bc6ed2e0b 100644 --- a/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx +++ b/src/frontend/src/pages/part/pricing/BomPricingPanel.tsx @@ -13,11 +13,11 @@ import { type ReactNode, useMemo, useState } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { CHART_COLORS } from '../../../components/charts/colors'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; import { formatDecimal, formatPriceRange } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { DateColumn, PartColumn } from '../../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { LoadingPricingData, NoPricingData } from './PricingPanel'; @@ -186,6 +186,7 @@ export default function BomPricingPanel({ params: { part: part?.pk, sub_part_detail: true, + pricing: true, has_pricing: true }, enableSelection: false, diff --git a/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx b/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx index 57f7c60a97..8151a55e62 100644 --- a/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx +++ b/src/frontend/src/pages/part/pricing/PriceBreakPanel.tsx @@ -12,6 +12,7 @@ import { import type { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { TableColumn } from '@lib/types/Tables'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; @@ -21,7 +22,6 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../../hooks/UseForm'; -import { useTable } from '../../../hooks/UseTable'; import { useUserState } from '../../../states/UserState'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/part/pricing/PricingPanel.tsx b/src/frontend/src/pages/part/pricing/PricingPanel.tsx index 4afec1e95f..ed634e495c 100644 --- a/src/frontend/src/pages/part/pricing/PricingPanel.tsx +++ b/src/frontend/src/pages/part/pricing/PricingPanel.tsx @@ -14,7 +14,7 @@ import { import { IconAlertCircle, IconExclamationCircle } from '@tabler/icons-react'; import type { ReactNode } from 'react'; -import { StylishText } from '../../../components/items/StylishText'; +import { StylishText } from '@lib/components/StylishText'; import type { panelOptions } from '../PartPricingPanel'; function AccordionControl(props: AccordionControlProps) { diff --git a/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx b/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx index 53f71388be..60b3f6fb3a 100644 --- a/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx +++ b/src/frontend/src/pages/part/pricing/PurchaseHistoryPanel.tsx @@ -5,9 +5,9 @@ import { type ReactNode, useCallback, useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency, formatDate } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx b/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx index 1f38d460c1..cdd6c4b224 100644 --- a/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx +++ b/src/frontend/src/pages/part/pricing/SaleHistoryPanel.tsx @@ -5,9 +5,9 @@ import { type ReactNode, useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { formatCurrency } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { DateColumn } from '../../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx b/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx index e807d84a4c..48982989d5 100644 --- a/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx +++ b/src/frontend/src/pages/part/pricing/SupplierPricingPanel.tsx @@ -5,9 +5,9 @@ import { useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; -import { useTable } from '../../../hooks/UseTable'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { SupplierPriceBreakColumns, diff --git a/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx b/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx index faffca8a7e..6aa8911d75 100644 --- a/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx +++ b/src/frontend/src/pages/part/pricing/VariantPricingPanel.tsx @@ -6,10 +6,10 @@ import { type ReactNode, useMemo } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { apiUrl } from '@lib/functions/Api'; +import useTable from '@lib/hooks/UseTable'; import type { TableColumn } from '@lib/types/Tables'; import { tooltipFormatter } from '../../../components/charts/tooltipFormatter'; import { formatCurrency } from '../../../defaults/formatters'; -import { useTable } from '../../../hooks/UseTable'; import { DateColumn, PartColumn } from '../../../tables/ColumnRenderers'; import { InvenTreeTable } from '../../../tables/InvenTreeTable'; import { NoPricingData } from './PricingPanel'; diff --git a/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx b/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx index f8295065c9..30500dbdc7 100644 --- a/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx +++ b/src/frontend/src/pages/purchasing/PurchaseOrderDetail.tsx @@ -4,6 +4,7 @@ import { IconInfoCircle, IconList, IconPackages } from '@tabler/icons-react'; import { type ReactNode, useMemo } from 'react'; import { useParams } from 'react-router-dom'; +import { StylishText } from '@lib/components/StylishText'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; @@ -25,7 +26,6 @@ import { HoldItemAction, OptionsActionDropdown } from '../../components/items/ActionDropdown'; -import { StylishText } from '../../components/items/StylishText'; import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; diff --git a/src/frontend/src/pages/purchasing/PurchasingIndex.tsx b/src/frontend/src/pages/purchasing/PurchasingIndex.tsx index a4a2f70d47..74e8280931 100644 --- a/src/frontend/src/pages/purchasing/PurchasingIndex.tsx +++ b/src/frontend/src/pages/purchasing/PurchasingIndex.tsx @@ -12,7 +12,7 @@ import { } from '@tabler/icons-react'; import { useMemo } from 'react'; -import { ModelType } from '@lib/enums/ModelType'; +import { ModelType, PluginPanelKey } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { useLocalStorage } from '@mantine/hooks'; import OrderCalendar from '../../components/calendar/OrderCalendar'; @@ -215,8 +215,8 @@ export default function PurchasingIndex() { ); diff --git a/src/frontend/src/pages/sales/ReturnOrderDetail.tsx b/src/frontend/src/pages/sales/ReturnOrderDetail.tsx index 7fccf41690..71b20d8768 100644 --- a/src/frontend/src/pages/sales/ReturnOrderDetail.tsx +++ b/src/frontend/src/pages/sales/ReturnOrderDetail.tsx @@ -4,6 +4,7 @@ import { IconInfoCircle, IconList } from '@tabler/icons-react'; import { type ReactNode, useMemo } from 'react'; import { useParams } from 'react-router-dom'; +import { StylishText } from '@lib/components/StylishText'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; @@ -25,7 +26,6 @@ import { HoldItemAction, OptionsActionDropdown } from '../../components/items/ActionDropdown'; -import { StylishText } from '../../components/items/StylishText'; import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; diff --git a/src/frontend/src/pages/sales/SalesIndex.tsx b/src/frontend/src/pages/sales/SalesIndex.tsx index d225081ec4..80285f4483 100644 --- a/src/frontend/src/pages/sales/SalesIndex.tsx +++ b/src/frontend/src/pages/sales/SalesIndex.tsx @@ -11,7 +11,7 @@ import { } from '@tabler/icons-react'; import { useMemo } from 'react'; -import { ModelType } from '@lib/enums/ModelType'; +import { ModelType, PluginPanelKey } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { useLocalStorage } from '@mantine/hooks'; import OrderCalendar from '../../components/calendar/OrderCalendar'; @@ -170,8 +170,8 @@ export default function SalesIndex() { ); diff --git a/src/frontend/src/pages/sales/SalesOrderDetail.tsx b/src/frontend/src/pages/sales/SalesOrderDetail.tsx index 9fc6317929..fa3b1a7093 100644 --- a/src/frontend/src/pages/sales/SalesOrderDetail.tsx +++ b/src/frontend/src/pages/sales/SalesOrderDetail.tsx @@ -10,6 +10,7 @@ import { import { type ReactNode, useMemo } from 'react'; import { useParams } from 'react-router-dom'; +import { StylishText } from '@lib/components/StylishText'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; @@ -31,7 +32,6 @@ import { HoldItemAction, OptionsActionDropdown } from '../../components/items/ActionDropdown'; -import { StylishText } from '../../components/items/StylishText'; import InstanceDetail from '../../components/nav/InstanceDetail'; import { PageDetail } from '../../components/nav/PageDetail'; import AttachmentPanel from '../../components/panels/AttachmentPanel'; diff --git a/src/frontend/src/pages/stock/LocationDetail.tsx b/src/frontend/src/pages/stock/LocationDetail.tsx index b8eb574561..99506ced9a 100644 --- a/src/frontend/src/pages/stock/LocationDetail.tsx +++ b/src/frontend/src/pages/stock/LocationDetail.tsx @@ -5,7 +5,7 @@ import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl } from '@lib/functions/Navigation'; import type { StockOperationProps } from '@lib/types/Forms'; import { t } from '@lingui/core/macro'; -import { Group, Skeleton, Stack, Text } from '@mantine/core'; +import { Group, Skeleton, Stack } from '@mantine/core'; import { IconInfoCircle, IconListDetails, @@ -160,11 +160,7 @@ export default function Stock() { return ( - {id && location?.pk ? ( - - ) : ( - {t`Top level stock location`} - )} + {id && location?.pk && } {id && location?.pk && } ); @@ -178,7 +174,8 @@ export default function Stock() { name: 'details', label: t`Location Details`, icon: , - content: detailsPanel + content: detailsPanel, + hidden: !location?.pk }, SegmentedControlPanel({ name: 'sublocations', @@ -457,7 +454,7 @@ export default function Stock() { title={(location?.name ?? id) ? t`Stock Location` : t`Stock`} subtitle={location?.description} icon={location?.icon && } - actions={locationActions} + actions={location?.pk ? locationActions : undefined} editAction={editLocation.open} editEnabled={ !!location?.pk && @@ -481,6 +478,7 @@ export default function Stock() { reloadInstance={refreshInstance} id={location?.pk} instance={location} + pluginPanelWithoutId /> {stockAdjustActions.modals.map((modal) => modal.modal)} diff --git a/src/frontend/src/pages/stock/StockDetail.tsx b/src/frontend/src/pages/stock/StockDetail.tsx index c508083616..e22424a130 100644 --- a/src/frontend/src/pages/stock/StockDetail.tsx +++ b/src/frontend/src/pages/stock/StockDetail.tsx @@ -21,19 +21,21 @@ import { IconPackages, IconSearch, IconShoppingCart, - IconSitemap + IconSitemap, + IconTransform } from '@tabler/icons-react'; import { useQuery } from '@tanstack/react-query'; import { type ReactNode, useMemo, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { ActionButton } from '@lib/components/ActionButton'; +import { StylishText } from '@lib/components/StylishText'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { getDetailUrl, getOverviewUrl } from '@lib/functions/Navigation'; -import type { StockOperationProps } from '@lib/types/Forms'; +import type { ApiFormFieldSet, StockOperationProps } from '@lib/types/Forms'; import { notifications } from '@mantine/notifications'; import { useBarcodeScanDialog } from '../../components/barcodes/BarcodeScanDialog'; import AdminButton from '../../components/buttons/AdminButton'; @@ -53,7 +55,6 @@ import { EditItemAction, OptionsActionDropdown } from '../../components/items/ActionDropdown'; -import { StylishText } from '../../components/items/StylishText'; import InstanceDetail from '../../components/nav/InstanceDetail'; import NavigationTree from '../../components/nav/NavigationTree'; import { PageDetail } from '../../components/nav/PageDetail'; @@ -665,6 +666,26 @@ export default function StockDetail() { onFormSuccess: refreshInstance }); + const convertStockItemFields: ApiFormFieldSet = useMemo(() => { + return { + part: { + filters: { + active: true, + convert_from: stockitem.part + } + } + }; + }, [stockitem]); + + const convertStockItem = useCreateApiFormModal({ + url: ApiEndpoints.stock_convert, + pk: stockitem.pk, + title: t`Convert Stock Item`, + modalId: 'convert-stock-item', + fields: convertStockItemFields, + onFormSuccess: refreshInstance + }); + const duplicateStockItemFields = useStockFields({ create: true, modalId: 'duplicate-stock-item' @@ -824,16 +845,6 @@ export default function StockDetail() { }); const stockActions = useMemo(() => { - // Can this stock item be transferred to a different location? - const canTransfer = - user.hasChangeRole(UserRoles.stock) && - !stockitem.sales_order && - !stockitem.belongs_to && - !stockitem.customer && - !stockitem.consumed_by; - - const isBuilding = stockitem.is_building; - const serial = stockitem.serial; const serialized = serial != null && @@ -841,6 +852,10 @@ export default function StockDetail() { serial != '' && stockitem.quantity == 1; + const canConvert = + !!stockitem.part_detail?.variant_of || + !!stockitem.part_detail?.is_template; + return [ , , @@ -906,6 +921,13 @@ export default function StockDetail() { hidden: !user.hasChangeRole(UserRoles.stock), onClick: () => editStockItem.open() }), + { + name: t`Convert`, + tooltip: t`Convert this stock item to a different part`, + hidden: !user.hasChangeRole(UserRoles.stock) || !canConvert, + icon: , + onClick: () => convertStockItem.open() + }, DeleteItemAction({ hidden: !user.hasDeleteRole(UserRoles.stock), onClick: () => deleteStockItem.open() @@ -1037,8 +1059,9 @@ export default function StockDetail() { {editStockItem.modal} - {duplicateStockItem.modal} {deleteStockItem.modal} + {convertStockItem.modal} + {duplicateStockItem.modal} {serializeStockItem.modal} {stockAdjustActions.modals.map((modal) => modal.modal)} {orderPartsWizard.wizard} diff --git a/src/frontend/src/states/LocalState.tsx b/src/frontend/src/states/LocalState.tsx index 869889439f..d0d7aceaac 100644 --- a/src/frontend/src/states/LocalState.tsx +++ b/src/frontend/src/states/LocalState.tsx @@ -36,8 +36,6 @@ interface LocalStateProps { // panels lastUsedPanels: Record; setLastUsedPanel: (panelKey: string) => (value: string) => void; - detailDrawerStack: number; - addDetailDrawer: (value: number | false) => void; navigationOpen: boolean; setNavigationOpen: (value: boolean) => void; allowMobile: boolean; @@ -134,15 +132,6 @@ export const useLocalState = create()( }); } }, - - // detail drawers - detailDrawerStack: 0, - addDetailDrawer: (value) => { - set({ - detailDrawerStack: - value === false ? 0 : get().detailDrawerStack + value - }); - }, // navigation navigationOpen: false, setNavigationOpen: (value) => { @@ -162,7 +151,7 @@ export const useLocalState = create()( /* pushes changes in user profile to backend */ -function patchUser(key: 'language' | 'theme' | 'widgets', val: any) { +export function patchUser(key: 'language' | 'theme' | 'widgets', val: any) { const uid = useUserState.getState().userId(); if (uid) { api.patch(apiUrl(ApiEndpoints.user_profile), { [key]: val }); diff --git a/src/frontend/src/tables/ColumnRenderers.tsx b/src/frontend/src/tables/ColumnRenderers.tsx index 21c3a1caa0..3c418f1339 100644 --- a/src/frontend/src/tables/ColumnRenderers.tsx +++ b/src/frontend/src/tables/ColumnRenderers.tsx @@ -272,16 +272,13 @@ export function StockColumn(props: StockColumnProps): TableColumn { - {text} - {part.units && ( - - [{part.units}] - - )} + {text} + {part.units && [{part.units}]} } title={t`Stock Information`} extra={extra} + iconColor={color} /> ); } diff --git a/src/frontend/src/tables/FilterSelectDrawer.tsx b/src/frontend/src/tables/FilterSelectDrawer.tsx index a737974403..6113f013b1 100644 --- a/src/frontend/src/tables/FilterSelectDrawer.tsx +++ b/src/frontend/src/tables/FilterSelectDrawer.tsx @@ -19,6 +19,7 @@ import { DateInput, type DateValue } from '@mantine/dates'; import dayjs from 'dayjs'; import { useCallback, useEffect, useMemo, useState } from 'react'; +import { StylishText } from '@lib/components/StylishText'; import type { FilterSetState, TableFilter, @@ -27,7 +28,6 @@ import type { } from '@lib/types/Filters'; import { IconCheck } from '@tabler/icons-react'; import { StandaloneField } from '../components/forms/StandaloneField'; -import { StylishText } from '../components/items/StylishText'; import { filterDisplayLabel, filterDisplayValue, diff --git a/src/frontend/src/tables/InvenTreeTable.tsx b/src/frontend/src/tables/InvenTreeTable.tsx index d290eafb48..89f1117833 100644 --- a/src/frontend/src/tables/InvenTreeTable.tsx +++ b/src/frontend/src/tables/InvenTreeTable.tsx @@ -1,12 +1,21 @@ +import { Boundary } from '@lib/components/Boundary'; +import { CopyableCell } from '@lib/components/CopyableCell'; import { RowActions } from '@lib/components/RowActions'; import { ModelInformationDict } from '@lib/enums/ModelInformation'; import { resolveItem } from '@lib/functions/Conversion'; import { cancelEvent } from '@lib/functions/Events'; +import { mapFields } from '@lib/functions/Forms'; import { getDetailUrl } from '@lib/functions/Navigation'; import { navigateToLink } from '@lib/functions/Navigation'; +import { hashString } from '@lib/functions/String'; +import { useStoredTableState } from '@lib/states/StoredTableState'; import type { TableFilter } from '@lib/types/Filters'; import type { ApiFormFieldSet } from '@lib/types/Forms'; -import type { InvenTreeTableProps, TableState } from '@lib/types/Tables'; +import type { + InvenTreeTableProps, + InvenTreeTableRenderProps, + TableState +} from '@lib/types/Tables'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; import { Box, Stack } from '@mantine/core'; @@ -24,16 +33,12 @@ import { } from 'mantine-datatable'; import type React from 'react'; import { useCallback, useEffect, useMemo, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { Boundary } from '../components/Boundary'; +import { useNavigate, useSearchParams } from 'react-router-dom'; import { useApi } from '../contexts/ApiContext'; -import { extractAvailableFields, mapFields } from '../functions/forms'; +import { extractAvailableFields } from '../functions/forms'; import { showApiErrorMessage } from '../functions/notifications'; -import { hashString } from '../functions/tables'; import { useLocalState } from '../states/LocalState'; import { useUserSettingsState } from '../states/SettingsStates'; -import { useStoredTableState } from '../states/StoredTableState'; -import { CopyableCell } from './CopyableCell'; import InvenTreeTableHeader from './InvenTreeTableHeader'; const ACTIONS_COLUMN_ACCESSOR: string = '--actions--'; @@ -62,20 +67,27 @@ const defaultInvenTreeTableProps: InvenTreeTableProps = { /** * Table Component which extends DataTable with custom InvenTree functionality + * + * This component is not used directly - instead, the "InvenTreeTable" component is a wrapper, + * which provides the necessary context and state management for this internal component. + * + * This function is also provided to the plugin context, and when used by external plugins, + * it must be supplied with with following additional context items: + * - api: AxiosInstance - The API instance for making requests to the server + * - navigate: NavigateFunction - The navigation function for navigating to different pages */ -export function InvenTreeTable>({ +export function InvenTreeTableInternal>({ url, tableState, tableData, columns, - props -}: Readonly<{ - url?: string; - tableState: TableState; - tableData?: any[]; - columns: TableColumn[]; - props: InvenTreeTableProps; -}>) { + props, + api, + navigate, + showContextMenu, + searchParams, + setSearchParams +}: Readonly>) { const { userTheme } = useLocalState(); const { @@ -91,10 +103,6 @@ export function InvenTreeTable>({ const [fieldNames, setFieldNames] = useState>({}); - const api = useApi(); - const navigate = useNavigate(); - const { showContextMenu } = useContextMenu(); - const userSettings = useUserSettingsState(); const stickyTableHeader = useMemo(() => { @@ -388,11 +396,7 @@ export function InvenTreeTable>({ useEffect(() => { tableState.setPage(1); tableState.clearSelectedRecords(); - }, [ - tableState.searchTerm, - tableState.filterSet.activeFilters, - tableState.queryFilters - ]); + }, [tableState.searchTerm, tableState.filterSet.activeFilters, searchParams]); // Account for invalid page offsets useEffect(() => { @@ -426,9 +430,9 @@ export function InvenTreeTable>({ ...tableProps.params }; - if (tableState.queryFilters && tableState.queryFilters.size > 0) { + if (searchParams && searchParams.size > 0) { // Allow override of filters based on URL query parameters - for (const [key, value] of tableState.queryFilters) { + for (const [key, value] of searchParams) { queryParams[key] = value; } } else if (tableState.filterSet.activeFilters) { @@ -467,7 +471,7 @@ export function InvenTreeTable>({ tableProps.params, tableProps.enablePagination, tableState.filterSet.activeFilters, - tableState.queryFilters, + searchParams, tableState.searchTerm, getOrderingTerm ] @@ -609,7 +613,7 @@ export function InvenTreeTable>({ // Refetch data when the query parameters change useEffect(() => { refetch(); - }, [tableState.queryFilters]); + }, [searchParams]); useEffect(() => { const loading: boolean = @@ -705,7 +709,7 @@ export function InvenTreeTable>({ const empty = () => {}; let items: ContextMenuItemOptions[] = []; - if (props.rowActions) { + if (!!props.rowActions) { items = props.rowActions(record).map((action) => ({ key: action.title ?? '', title: action.title ?? '', @@ -743,7 +747,7 @@ export function InvenTreeTable>({ }); } - return showContextMenu(items)(event); + return showContextMenu?.(items)(event); }; // Pagination refresh table if pageSize changes @@ -825,6 +829,8 @@ export function InvenTreeTable>({ hasSwitchableColumns={hasSwitchableColumns} columns={dataColumns} filters={filters} + queryFilters={searchParams} + clearQueryFilters={() => setSearchParams?.(new URLSearchParams())} toggleColumn={toggleColumn} /> @@ -835,7 +841,9 @@ export function InvenTreeTable>({ style={{ stickyHeader: stickyTableHeader ? 'top' : undefined }} - height={stickyTableHeader ? '80vh' : undefined} + height={ + tableProps.height ?? (stickyTableHeader ? '80vh' : undefined) + } withTableBorder={!tableProps.noHeader} withColumnBorders striped @@ -874,3 +882,51 @@ export function InvenTreeTable>({ ); } + +/** + * This is an internal wrapper function for the InvenTreeTableInternal component, + * which provides the necessary context management for the table to function correctly. + * + * In addition to the provided table props, this wrapper provides context for: + * + * - api: The API instance for making requests to the server + * - navigate: The navigation function for navigating to different pages + * + */ +export function InvenTreeTable>({ + url, + tableState, + tableData, + columns, + props +}: Readonly<{ + url?: string; + tableState: TableState; + tableData?: T[]; + columns: TableColumn[]; + props: InvenTreeTableProps; +}>) { + const api = useApi(); + const navigate = useNavigate(); + + const { showContextMenu } = useContextMenu(); + + // Extract URL query parameters (e.g. ?active=true&overdue=false) + // Note: These can only be used internally (i.e *not in plugin context) + const [searchParams, setSearchParams] = useSearchParams(); + + return ( + + ); +} diff --git a/src/frontend/src/tables/InvenTreeTableHeader.tsx b/src/frontend/src/tables/InvenTreeTableHeader.tsx index d5d6b45c27..612b6ba06d 100644 --- a/src/frontend/src/tables/InvenTreeTableHeader.tsx +++ b/src/frontend/src/tables/InvenTreeTableHeader.tsx @@ -23,19 +23,19 @@ import { useMemo, useState } from 'react'; import { Fragment } from 'react/jsx-runtime'; import { ActionButton } from '@lib/components/ActionButton'; +import { Boundary } from '@lib/components/Boundary'; import { ButtonMenu } from '@lib/components/ButtonMenu'; import { SearchInput } from '@lib/components/SearchInput'; +import { StylishText } from '@lib/components/StylishText'; +import { TableColumnSelect } from '@lib/components/TableColumnSelect'; import { resolveItem } from '@lib/functions/Conversion'; import type { TableFilter } from '@lib/types/Filters'; import type { TableState } from '@lib/types/Tables'; import type { InvenTreeTableProps } from '@lib/types/Tables'; import { showNotification } from '@mantine/notifications'; -import { Boundary } from '../components/Boundary'; import { PrintingActions } from '../components/buttons/PrintingActions'; -import { StylishText } from '../components/items/StylishText'; import useDataExport from '../hooks/UseDataExport'; import { useDeleteApiFormModal } from '../hooks/UseForm'; -import { TableColumnSelect } from './ColumnSelect'; import { FilterPreview, FilterSelectDrawer } from './FilterSelectDrawer'; /** @@ -48,6 +48,8 @@ export default function InvenTreeTableHeader({ hasSwitchableColumns, columns, filters, + queryFilters, + clearQueryFilters, toggleColumn }: Readonly<{ tableUrl?: string; @@ -56,6 +58,8 @@ export default function InvenTreeTableHeader({ hasSwitchableColumns: boolean; columns: any; filters: TableFilter[]; + queryFilters?: URLSearchParams; + clearQueryFilters: () => void; toggleColumn: (column: string) => void; }>) { // Filter list visibility @@ -80,8 +84,8 @@ export default function InvenTreeTableHeader({ } // Allow overriding of query parameters - if (tableState.queryFilters) { - for (const [key, value] of tableState.queryFilters) { + if (queryFilters) { + for (const [key, value] of queryFilters) { if (value != undefined) { filters[key] = value; } @@ -89,7 +93,7 @@ export default function InvenTreeTableHeader({ } return filters; - }, [tableProps.params, tableState.filterSet, tableState.queryFilters]); + }, [tableProps.params, tableState.filterSet, queryFilters]); const exportModal = useDataExport({ url: tableUrl ?? '', @@ -139,12 +143,12 @@ export default function InvenTreeTableHeader({ }); const hasCustomSearch = useMemo(() => { - return tableState.queryFilters.has('search'); - }, [tableState.queryFilters]); + return queryFilters?.has('search'); + }, [queryFilters]); const hasCustomFilters = useMemo(() => { - return (tableState?.queryFilters?.size ?? 0) > 0; - }, [tableState.queryFilters]); + return (queryFilters?.size ?? 0) > 0; + }, [queryFilters]); // Extract ID values for label and report printing const printingIdValues = useMemo(() => { @@ -174,7 +178,7 @@ export default function InvenTreeTableHeader({ color='yellow' withCloseButton title={t`Custom table filters are active`} - onClose={() => tableState.clearQueryFilters()} + onClose={() => clearQueryFilters()} /> )} diff --git a/src/frontend/src/tables/bom/BomSubassemblyTable.tsx b/src/frontend/src/tables/bom/BomSubassemblyTable.tsx new file mode 100644 index 0000000000..badf18e75d --- /dev/null +++ b/src/frontend/src/tables/bom/BomSubassemblyTable.tsx @@ -0,0 +1,123 @@ +import { ApiEndpoints, ModelType, apiUrl, useTable } from '@lib/index'; +import type { TableColumn, TableState } from '@lib/types/Tables'; +import { Group, Paper } from '@mantine/core'; +import { IconCornerLeftUp } from '@tabler/icons-react'; +import { useMemo } from 'react'; +import Expand from '../../components/items/Expand'; +import { useUserSettingsState } from '../../states/SettingsStates'; +import { + IPNColumn, + ReferenceColumn, + RenderPartColumn +} from '../ColumnRenderers'; +import { InvenTreeTable } from '../InvenTreeTable'; +import RowExpansionIcon from '../RowExpansionIcon'; + +export function subassemblyRowExpansion({ + table +}: { + table: TableState; +}) { + const userSettings = useUserSettingsState(); + + return useMemo(() => { + // Display of sub-assemblies is optional + if (!userSettings.isSet('SHOW_BOM_SUBASSEMBLY_LEVELS')) { + return undefined; + } + + return { + allowMultiple: true, + expandable: ({ record }: { record: any }) => { + return ( + table.isRowExpanded(record.pk) || !!record.sub_part_detail?.assembly + ); + }, + content: ({ record }: { record: any }) => { + return ; + } + }; + }, [table.isRowExpanded, userSettings]); +} + +/** + * Display a sub-table of the BOM, for displaying sub-assemblies within the main BOM table. + */ +export default function BomSubassemblyTable({ + partId +}: { + partId: number; +}) { + const table = useTable('bom-subassembly'); + + const rowExpansion = subassemblyRowExpansion({ table: table }); + + const userSettings = useUserSettingsState(); + + const tableColumns: TableColumn[] = useMemo(() => { + const allowExpansion = userSettings.isSet('SHOW_BOM_SUBASSEMBLY_LEVELS'); + + return [ + { + accessor: 'sub_part', + render: (record: any) => { + return ( + + {record.sub_part_detail?.assembly && allowExpansion && ( + + )} + + + ); + } + }, + IPNColumn({ + accessor: 'sub_part_detail.IPN' + }), + ReferenceColumn({ + width: 400 + }), + { + accessor: 'quantity', + width: 250 + } + ]; + }, [table.isRowExpanded, userSettings]); + + return ( + + + + + {}, + rowExpansion: rowExpansion, + enableSearch: false, + enableFilters: false, + enableColumnSwitching: false, + enableRefresh: false, + enableReports: false, + height: 'auto', + minHeight: 150, + params: { + part: partId, + substitutes: false, + part_detail: true, + sub_part_detail: true + } + }} + /> + + + + ); +} diff --git a/src/frontend/src/tables/bom/BomTable.tsx b/src/frontend/src/tables/bom/BomTable.tsx index 09a2c7ee1c..89cc217bf3 100644 --- a/src/frontend/src/tables/bom/BomTable.tsx +++ b/src/frontend/src/tables/bom/BomTable.tsx @@ -1,3 +1,19 @@ +import { t } from '@lingui/core/macro'; +import { Alert, Group, Stack, Text } from '@mantine/core'; +import { showNotification } from '@mantine/notifications'; +import { + IconArrowRight, + IconCircleCheck, + IconEdit, + IconFileUpload, + IconLock, + IconPlus, + IconSwitch3 +} from '@tabler/icons-react'; +import { type ReactNode, useCallback, useMemo, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { ActionButton } from '@lib/components/ActionButton'; import { type RowAction, RowDeleteAction, @@ -9,23 +25,9 @@ import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; import { navigateToLink } from '@lib/functions/Navigation'; +import useTable from '@lib/hooks/UseTable'; import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; -import { t } from '@lingui/core/macro'; -import { ActionIcon, Alert, Group, Stack, Text, Tooltip } from '@mantine/core'; -import { showNotification } from '@mantine/notifications'; -import { - IconArrowRight, - IconCircleCheck, - IconExclamationCircle, - IconFileUpload, - IconLock, - IconPlus, - IconSwitch3 -} from '@tabler/icons-react'; -import { type ReactNode, useCallback, useMemo, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { Thumbnail } from '../../components/images/Thumbnail'; import { ActionDropdown } from '../../components/items/ActionDropdown'; import { RenderPart } from '../../components/render/Part'; import { useApi } from '../../contexts/ApiContext'; @@ -37,8 +39,8 @@ import { useDeleteApiFormModal, useEditApiFormModal } from '../../hooks/UseForm'; -import { useTable } from '../../hooks/UseTable'; import { useImporterState } from '../../states/ImporterState'; +import { useUserSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; import { BooleanColumn, @@ -46,11 +48,14 @@ import { DescriptionColumn, IPNColumn, NoteColumn, - ReferenceColumn + ReferenceColumn, + RenderPartColumn } from '../ColumnRenderers'; import { PartCategoryFilter } from '../Filter'; import { InvenTreeTable } from '../InvenTreeTable'; +import RowExpansionIcon from '../RowExpansionIcon'; import { TableHoverCard } from '../TableHoverCard'; +import { subassemblyRowExpansion } from './BomSubassemblyTable'; // Calculate the total stock quantity available for a given BomItem function availableStockQuantity(record: any): number { @@ -81,46 +86,64 @@ export function BomTable({ const user = useUserState(); const table = useTable('bom'); const navigate = useNavigate(); + const openImporter = useImporterState((state) => state.openImporter); + const [isEditing, setIsEditing] = useState(false); + + const userSettings = useUserSettingsState(); + const tableColumns: TableColumn[] = useMemo(() => { + const allowExpansion = userSettings.isSet('SHOW_BOM_SUBASSEMBLY_LEVELS'); + return [ { accessor: 'sub_part', switchable: false, sortable: true, + minWidth: 250, render: (record: any) => { const part = record.sub_part_detail; + const extra = []; - if (record.part != partId) { + if (partId && record.part != partId) { extra.push( - {t`This BOM item is defined for a different parent`} + {t`This BOM item is defined for a different parent`} ); } + if (!record.validated) { + extra.push( + + {t`This BOM item has not been validated`} + + ); + } + + const assembly: boolean = record.sub_part_detail?.assembly ?? false; + return ( part && ( - - - } - extra={extra} - title={t`Part Information`} - /> - {!record.validated && ( - - - - - - )} - + + {assembly && !isEditing && allowExpansion && ( + + )} + + + } + iconColor={record.validated ? undefined : 'red'} + extra={extra} + title={t`Part Information`} + /> ) ); } @@ -377,7 +400,8 @@ export function BomTable({ return '-'; } - const can_build = Math.trunc(record.can_build); + const can_build = Math.max(0, Math.trunc(record.can_build)); + const value = ( { return [ @@ -530,7 +554,7 @@ export function BomTable({ table: table }); - const editSubstitues = useEditBomSubstitutesForm({ + const editSubstitutes = useEditBomSubstitutesForm({ bomItemId: selectedBomItem.pk, bomItem: selectedBomItem, onClose: () => { @@ -583,14 +607,14 @@ export function BomTable({ hidden: partLocked || record.validated || - !user.hasChangeRole(UserRoles.part), + !user.hasChangeRole(UserRoles.bom), icon: , onClick: () => { validateBomItem(record); } }, RowEditAction({ - hidden: partLocked || !user.hasChangeRole(UserRoles.part), + hidden: partLocked || !user.hasChangeRole(UserRoles.bom), onClick: () => { setSelectedBomItem(record); editBomItem.open(); @@ -599,15 +623,15 @@ export function BomTable({ { title: t`Edit Substitutes`, color: 'blue', - hidden: partLocked || !user.hasAddRole(UserRoles.part), + hidden: partLocked || !user.hasAddRole(UserRoles.bom), icon: , onClick: () => { setSelectedBomItem(record); - editSubstitues.open(); + editSubstitutes.open(); } }, RowDeleteAction({ - hidden: partLocked || !user.hasDeleteRole(UserRoles.part), + hidden: partLocked || !user.hasDeleteRole(UserRoles.bom), onClick: () => { setSelectedBomItem(record); deleteBomItem.open(); @@ -615,7 +639,7 @@ export function BomTable({ }) ]; }, - [partId, partLocked, user] + [isEditing, partId, partLocked, user] ); const tableActions = useMemo(() => { @@ -625,7 +649,7 @@ export function BomTable({ tooltip={t`Add BOM Items`} position='bottom-start' icon={} - hidden={partLocked || !user.hasAddRole(UserRoles.part)} + hidden={!isEditing || partLocked || !user.hasAddRole(UserRoles.bom)} actions={[ { name: t`Add BOM Item`, @@ -640,9 +664,32 @@ export function BomTable({ onClick: () => importBomItem.open() } ]} + />, +