diff --git a/.github/workflows/check_translations.yaml b/.github/workflows/check_translations.yaml index 2ce87a8c1d..1849cb63ac 100644 --- a/.github/workflows/check_translations.yaml +++ b/.github/workflows/check_translations.yaml @@ -46,4 +46,6 @@ jobs: run: | python ./.github/scripts/check_source_strings.py --frontend --backend - name: Check Migration Files - run: python3 .github/scripts/check_migration_files.py + run: | + invoke migrate --detect + python3 .github/scripts/check_migration_files.py diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index af1943336e..2f40092117 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -167,7 +167,7 @@ jobs: with: persist-credentials: false - name: Set Up Python ${{ env.python_version }} - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: ${{ env.python_version }} - name: Version Check diff --git a/.github/workflows/frontend.yaml b/.github/workflows/frontend.yaml index 70c711c15a..469c73785d 100644 --- a/.github/workflows/frontend.yaml +++ b/.github/workflows/frontend.yaml @@ -141,7 +141,7 @@ jobs: - name: Install dependencies run: invoke int.frontend-compile --extract - name: Cache Playwright browsers - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 id: playwright-cache with: path: ~/.cache/ms-playwright @@ -223,7 +223,7 @@ jobs: - name: Install dependencies run: invoke int.frontend-compile --extract - name: Cache Playwright browsers - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 id: playwright-cache with: path: ~/.cache/ms-playwright diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index e3fe43fbde..a5fd6ae8ae 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -112,7 +112,7 @@ jobs: with: persist-credentials: false - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: ${{ env.python_version }} cache: "pip" @@ -156,7 +156,7 @@ jobs: with: persist-credentials: false - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: ${{ env.python_version }} - name: Check Config @@ -301,7 +301,7 @@ jobs: echo "after move" ls -la artifact rm -rf artifact - - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v7.1.0 + - uses: stefanzweifel/git-auto-commit-action@4a55954c782fc1ea30b9056cd3e7a2b40ca8887d # v7.2.0 name: Commit schema changes with: commit_message: "Update API schema for ${{ env.version }} / ${{ github.sha }}" @@ -363,7 +363,7 @@ jobs: pip install . if: needs.paths-filter.outputs.submit-performance == 'true' - name: Performance Reporting - uses: CodSpeedHQ/action@63f3e98b61959fe67f146a3ff022e4136fe9bb9c # v4.17.6 + uses: CodSpeedHQ/action@a4a36bb07c0638b0b4ca52bf1f3dad1b4289e52f # v4.18.1 # 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: @@ -405,7 +405,9 @@ jobs: - name: Test Translations run: invoke dev.translate - name: Check Migration Files - run: python3 .github/scripts/check_migration_files.py + run: | + invoke migrate --detect + python3 .github/scripts/check_migration_files.py - name: Coverage Tests run: invoke dev.test --check --coverage --translations - name: Upload raw coverage to artifacts @@ -454,7 +456,7 @@ jobs: env: node_version: '>=24' - name: Performance Reporting - uses: CodSpeedHQ/action@63f3e98b61959fe67f146a3ff022e4136fe9bb9c # v4.17.6 + uses: CodSpeedHQ/action@a4a36bb07c0638b0b4ca52bf1f3dad1b4289e52f # v4.18.1 with: mode: walltime run: inv dev.test --pytest diff --git a/CHANGELOG.md b/CHANGELOG.md index 015bd19aea..06d25aa50f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes - [#11971](https://github.com/inventree/InvenTree/pull/11971) is a major refactor of how notes are handled. Notes are now stored in a separate database table (in line with how attachments are handled), and each model instance can have multiple notes associated with it. The `notes` field has been removed from the individual models (and their associated API endpoints), and notes are now accessed via the new `/api/note/` endpoint. Existing notes data (and any embedded images) are automatically migrated to the new notes table, with the markdown content converted to HTML. Any external client applications which read or write the `notes` field via the API will need to be updated to use the new endpoint. +- [#12360](https://github.com/inventree/InvenTree/pull/12360) removes the MPTT mixin from the StockItem model, and removes the self-referential tree structure from the database. This change was made to simplify the StockItem model and improve performance, as the MPTT tree structure was causing significant overhead in certain operations. Any external client applications which made use of the MPTT functionality will need to be updated to account for this change. +- [#12320](https://github.com/inventree/InvenTree/pull/12320) changes the default behavior of the `invoke migrate` command. Now, it no longer generates new migrations by default. Instead, it will only apply existing migrations to the database. If you want to detect and generate new migrations, you must now explicitly use the `--detect` flag. This change was made to prevent accidental generation of migrations when running the command, which could lead to unexpected changes in the database schema. Additionally, `invoke update` will no longer result in new migrations being generated, and will only apply existing migrations to the database. This change was made to ensure that the update process is predictable and does not introduce unexpected changes to the database schema. - [#12223](https://github.com/inventree/InvenTree/pull/12223) removes support for python 3.11 and stops providing packages for Debian 11 and Ubuntu 20.04. ### Added + +- [#12388](https://github.com/inventree/InvenTree/pull/12388) adds uniqueness requirements options for the Parameter and ParameterTemplate models. This allows users to specify whether a parameter value should be unique for a given model type, or globally unique across all models. +- [#12310](https://github.com/inventree/InvenTree/pull/12310) adds the ability to disassemble (or break apart) assembled stock items into their component parts, based on the Bill of Materials (BOM) associated with the stock item. This allows users to easily break down assembled items into their constituent parts, which can be useful for inventory management and tracking purposes. +- [#12117](https://github.com/inventree/InvenTree/pull/12117) adds a "preview" drawer to the InvenTree table component, allowing users to preview the details of a selected row without navigating away from the table view. This feature is optional and can be enabled or disabled via the `PREVIEW_DRAWER_ENABLED` system setting. +- [#12341](https://github.com/inventree/InvenTree/pull/12341) adds support for importing internal part prices. - [#12295](https://github.com/inventree/InvenTree/pull/12295) adds "consumable" field to the Part model and API endpoints - [#12250](https://github.com/inventree/InvenTree/pull/12250) adds "active" field to the ProjectCode model and API endpoints diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7b48b0db69..e9115615dc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -104,8 +104,8 @@ The project uses [Invoke](https://www.pyinvoketasks.com/) (`tasks.py`) as the ta # One-time setup: creates venv at dev/venv/, installs deps, sets up pre-commit hooks invoke dev.setup-dev -# Apply database migrations -invoke migrate +# Apply database migrations (and detect/create new migration files if required) +invoke migrate --detect # Create an admin account (required to log in) invoke superuser diff --git a/contrib/container/Dockerfile b/contrib/container/Dockerfile index de1ab6ce8e..cb0147de14 100644 --- a/contrib/container/Dockerfile +++ b/contrib/container/Dockerfile @@ -10,7 +10,7 @@ # - Monitors source files for any changes, and live-reloads server # Base image last bumped 2026-06-16 -FROM python:3.14.6-slim-trixie@sha256:44dd04494ee8f3b538294360e7c4b3acb87c8268e4d0a4828a6500b1eff50061 AS inventree_base +FROM python:3.14.6-slim-trixie@sha256:b877e50bd90de10af8d82c57a022fc2e0dc731c5320d762a27986facfc3355c1 AS inventree_base # Build arguments for this image ARG commit_tag="" diff --git a/docs/docs/api/index.md b/docs/docs/api/index.md index 256eddd9cf..fa05c6bc2d 100644 --- a/docs/docs/api/index.md +++ b/docs/docs/api/index.md @@ -48,7 +48,7 @@ Users can authenticate against the API using basic authentication - specifically Each user is assigned an authentication token which can be used to access the API. This token is persistent for that user (unless invalidated by an administrator) and can be used across multiple sessions. !!! info "Token Administration" - User tokens can be created and/or invalidated via the user settings, [Admin Center](../settings/admin.md#admin-center) or admin interface. + User tokens can be created and/or invalidated via the user settings, [Admin Center](../settings/admin.md#admin-center), or the [Database Admin interface](../settings/db_admin.md). #### Requesting a Token diff --git a/docs/docs/assets/images/concepts/ui_preview_details_link.png b/docs/docs/assets/images/concepts/ui_preview_details_link.png new file mode 100644 index 0000000000..8b375591c2 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_preview_details_link.png differ diff --git a/docs/docs/assets/images/concepts/ui_preview_drawer.png b/docs/docs/assets/images/concepts/ui_preview_drawer.png new file mode 100644 index 0000000000..17964acc3e Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_preview_drawer.png differ diff --git a/docs/docs/barcodes/index.md b/docs/docs/barcodes/index.md index 6d5eb04d76..e9fa6020ea 100644 --- a/docs/docs/barcodes/index.md +++ b/docs/docs/barcodes/index.md @@ -101,7 +101,7 @@ If enabled, InvenTree can retain logs of the most recent barcode scans. This can Refer to the [barcode settings](../settings/global.md#barcodes) to enable barcode history logging. -The barcode history can be viewed via the admin panel in the web interface. +The barcode history can be viewed in the [Admin Center](../settings/admin.md#admin-center) in the web interface. ## Barcode Settings diff --git a/docs/docs/concepts/data_import.md b/docs/docs/concepts/data_import.md index 16b1e1f259..eac5712c86 100644 --- a/docs/docs/concepts/data_import.md +++ b/docs/docs/concepts/data_import.md @@ -4,7 +4,7 @@ title: Importing Data ## Importing Data -External data can be imported via the admin interface, allowing for rapid integration of existing datasets, or bulk editing of table data. +External data can be imported via the [Admin Center](../settings/admin.md#admin-center), allowing for rapid integration of existing datasets, or bulk editing of table data. !!! danger "Danger" Uploading bulk data directly is a non-reversible action. @@ -57,7 +57,7 @@ An import session can be initiated from a number of different contexts within th Staff users can create an import session from within the [Admin Center](../settings/admin.md#admin-center). This is a general-purpose import session, and the user will be required to select the type of data to import. -Users can quickly navigate to the data import management page from the [spotlight search](../concepts/user_interface.md#spotlight), by searching for "import" and selecting the "Import data" option. +Users can quickly navigate to the data import management page from the [spotlight search](./ui/index.md#spotlight), by searching for "import" and selecting the "Import data" option. ### Data Tables diff --git a/docs/docs/concepts/parameters.md b/docs/docs/concepts/parameters.md index 47e42cec97..0a520a4be4 100644 --- a/docs/docs/concepts/parameters.md +++ b/docs/docs/concepts/parameters.md @@ -30,12 +30,13 @@ Parameter templates are used to define the different types of parameters which a | Choices | A comma-separated list of valid choices for parameter values linked to this template. | | Checkbox | If set, parameters linked to this template can only be assigned values *true* or *false* | | Selection List | If set, parameters linked to this template can only be assigned values from the linked [selection list](#selection-lists) | +| Unique | Enforce a [uniqueness requirement](#parameter-uniqueness) on parameter values linked to this template | {{ image("concepts/parameter-template.png", "Parameters Template") }} ### Create Template -Parameter templates are created and edited via the [admin interface](../settings/admin.md). +Parameter templates are created and edited via the [Admin Center](../settings/admin.md#admin-center). To create a template: @@ -59,6 +60,45 @@ To add a parameter, navigate to a specific part detail page, click on the "Param Select the parameter `Template` you would like to use for this parameter, fill-out the `Data` field (value of this specific parameter) and click the "Submit" button. +### Parameter Uniqueness + +A parameter template can be configured to enforce a uniqueness requirement on the values of any parameters linked to it. This is useful for parameters which are expected to act as a unique identifier and prevents duplicate values from being entered by mistake. + +The `Unique` attribute on a parameter template supports the following options: + +| Option | Description | +| --- | --- | +| No uniqueness required | The default option - no restriction is placed on parameter values | +| Unique for model type | A parameter value must be unique amongst all other parameters (linked to this template) which are assigned to the *same* model type. For example, a template with this option enabled could be used to enforce unique serial numbers across all `Part` instances, without preventing the same value from also being used against a `Company` instance | +| Globally unique | A parameter value must be unique amongst *all* other parameters linked to this template, regardless of the model type to which they are assigned | + +!!! info "Case Insensitive" + Uniqueness checks are case-insensitive - for example, the values `ABC123` and `abc123` are considered to be duplicates of each other. + +If a parameter value is entered which does not satisfy the uniqueness requirement of its template, it will be rejected and an error message displayed. + +#### Validation Against Numeric Value + +If a parameter template defines a set of [units](#parameter-units), uniqueness is checked against the *normalized numeric value* of the parameter, rather than the raw text entered. This ensures that equivalent values expressed in different (but compatible) units are correctly detected as duplicates. + +For example, if a *Resistance* template (with base units of `ohm`) enforces uniqueness, then a value of `1k` would be rejected as a duplicate of an existing value of `1000`, as they both represent the same physical quantity. + +Templates which do not define a set of units are compared using a direct (case-insensitive) text comparison of the raw parameter value. + +#### Copying Caveats + +Some workflows in InvenTree allow parameters to be copied from one object to another - for example, when duplicating a part, build order, or other object which supports parameters. + +Any parameter which is linked to a template with a uniqueness requirement is *skipped* when copying parameters in this way. This prevents the copy operation from creating a duplicate (and therefore invalid) value on the new object. If this occurs, the new object simply will not have a parameter created against that particular template - it can be added manually (with a distinct value) afterwards. + +#### Category Parameter Caveats + +A parameter template can be linked to a part category, along with a default value which is automatically applied to any new parts created within that category (or a sub-category). + +This default value system is not compatible with a template which enforces a uniqueness requirement - applying the *same* default value to every part in a category would immediately conflict with the "unique" requirement, as soon as more than one part exists in that category. + +For this reason, a category-based default value is *not* applied for any parameter template which has a uniqueness requirement configured. If you need to assign values for such parameters, this must be done manually (or via the API) on a per-part basis. + ## Parametric Tables Parametric tables gather all parameters from all objects of a particular type, to be sorted and filtered. diff --git a/docs/docs/concepts/ui/forms.md b/docs/docs/concepts/ui/forms.md new file mode 100644 index 0000000000..8c153eacce --- /dev/null +++ b/docs/docs/concepts/ui/forms.md @@ -0,0 +1,37 @@ +--- +title: Forms +--- + +## Forms + +Data entry and editing within InvenTree is typically performed through the use of forms, which provide a structured interface for inputting and modifying data. Forms are designed to be user-friendly and efficient, allowing users to quickly enter and update information within the system. + +Forms are typically displayed as a modal dialog, separated into multiple sections and fields. + +### Data Creation + +Example: Creating a new part via the "Add Part" form: + +{{ image("concepts/ui_form_add_part.png", "Add Part Button") }} + +On several forms is displayed option "Keep form open" in bottom part of the form on left side of Submit button (option is visible on the screenshot above). When this switch is turned on, form window is not closed after submit and filled form data is not reset. This is useful for creating more entries at one time with similar properties (e.g. only different number in name). + +### Data Editing + +Example: Editing an existing purchase order via the "Edit Purchase Order" form: + +{{ image("concepts/ui_form_edit_po.png", "Edit Purchase Order") }} + +### Form Submission + +A form can be submitted by clicking the "Submit" button located at the bottom-right corner of the form. + +Alternatively, an open form can be submitted using the keyboard shortcut `Ctrl + Enter` (or `Cmd + Enter` on macOS). This shortcut works even while typing in a form field, providing a quick way to submit the form without needing to reach for the mouse. It is particularly useful in multi-line text fields, where pressing `Enter` inserts a new line rather than submitting the form. + +The keyboard shortcut is only active while a form is open, and follows the same rules as the "Submit" button - for example, it has no effect while the form is loading, or when editing an existing item without any changes. + +### Confirm Actions + +Many actions within InvenTree require user confirmation before they can be executed. This is typically implemented through the use of confirmation dialogs, which prompt the user to confirm their intention before proceeding with the action. + +{{ image("concepts/ui_form_hold_po.png", "Confirmation Dialog") }} diff --git a/docs/docs/concepts/ui/global_search.md b/docs/docs/concepts/ui/global_search.md new file mode 100644 index 0000000000..c6a81385ec --- /dev/null +++ b/docs/docs/concepts/ui/global_search.md @@ -0,0 +1,31 @@ +--- +title: Global Search +--- + +## Global Search + +Accessible from the [main menu](./index.md#main-menu), the global search functionality allows users to quickly find specific items or information within the InvenTree system. The search icon is located at the top of the interface and provides a convenient way to search across all sections of the system. + +Clicking on the "search" icon (in the menu bar) opens the search menu, which allows users to enter search queries and view results from across the system. + +{{ image("concepts/ui_global_search.png", "Global Search") }} + +Search results are organized by category (e.g. Parts, Stock, Manufacturing, etc.) and provide quick access to the relevant pages for each search result. + +### Detail View + +To navigate to the detail page for a particular search result, simply click on the desired result from the search results list. This will take you directly to the relevant page within the InvenTree system, allowing you to view and interact with the specific item or information you were searching for. + +### Full Results + +The "global search" menu provides a limited set of search results for each category, typically showing the most relevant or recent results. To view the full set of search results for a particular category, click on the "View all results" button located at the top-left of the search results list for that category: + +{{ image("concepts/ui_global_search_view_all.png", "View Full Search Results") }} + +### Collapse Result Groups + +To collapse a particular category of search results in the global search menu, click on the "collapse" icon located at the top-right corner of the search results list for that category. This will hide the search results for that category, allowing you to focus on other categories or search results. + +### Remove Result Groups + +To remove a particular category of search results from the global search menu, click on the "remove" icon located at the top-right corner of the search results list for that category. diff --git a/docs/docs/concepts/ui/index.md b/docs/docs/concepts/ui/index.md new file mode 100644 index 0000000000..7410220a53 --- /dev/null +++ b/docs/docs/concepts/ui/index.md @@ -0,0 +1,182 @@ +--- +title: User Interface +--- + +## User Interface + +The InvenTree user interface is designed to be intuitive and user-friendly, providing easy access to the various features and functions of the system. The interface is organized into several key components, including navigation menus, settings, forms, tables, search functionality, and more. + +The interface is designed for large-format displays, and as such is explicitly *not* optimized for mobile devices. However, the interface is responsive and should work on a wide range of desktop screen sizes. + +## Navigation + +Navigation throughout the InvenTree interface is designed to be straightforward and efficient, allowing users to quickly access the various sections and features of the system. The navigation is organized into several key areas, including the main menu, navigation menu, and page panels. + +### Main Menu + +The main menu is located at the top of the interface and provides access to the primary sections of the system: + +{{ image("concepts/ui_main_menu.png", "Main Menu") }} + +From the main menu, users can access the following items: + +- [Navigation Menu](#navigation-menu) +- [Dashboard](#dashboard) +- [Global Search](./global_search.md) +- [Spotlight](#spotlight) +- [Barcode Scanning](#barcode-scanning) +- [Notifications](#notifications) +- [User Menu](#user-menu) + +As well as allowing navigation to the following main sections: + +- [Parts](../../part/index.md) +- [Stock](../../stock/index.md) +- [Manufacturing](../../manufacturing/index.md) +- [Purchasing](../../purchasing/index.md) +- [Sales](../../sales/index.md) + +### Navigation Menu + +The global navigation menu is located on the left-hand side of the interface and provides access to the various sections of the system. + +{{ image("concepts/ui_navigation_menu.png", "Navigation Menu") }} + +The navigation menu is organized into several key areas, including: + +- **Navigation:** Provides access to the main sections of the system, including Parts, Stock, Manufacturing, Purchasing, and Sales. +- **Settings:** Quick access to user settings, system settings, and the admin center. +- **Actions:** Provides quick access to commonly used actions +- **Documentation:** Links to the online documentation. +- **About:** InvenTree version and license information. + +### User Menu + +The user menu is located in the top-right corner of the interface and provides access to user-specific settings and actions. + +{{ image("concepts/ui_user_menu.png", "User Menu") }} + +The user menu provides access to the following items: + +- **User Settings:** Access to [user settings](../../settings/user.md). +- **System Settings:** Access to [global settings](../../settings/global.md) settings. *Note: Access to system settings may be restricted based on user permissions.* +- **Admin Center:** Access to the [admin center](../../settings/admin.md#admin-center) for operational administration +- **Database Admin Interface:** Low level administration via the [Database Admin Interface](../../settings/db_admin.md). *Note: Access may be restricted based on user permissions.* +- **Change Color Mode:** Toggle between light and dark color modes. +- **About InvenTree:** View version and license information about InvenTree. +- **Logout:** Log out of the InvenTree system. + +### Page Panels + +Most detail pages views within InvenTree are organized into panels, which provide a structured layout for displaying information and actions related to the current page. + +Panels are arranged in a vertical stack on the left side of the page, with the main content area on the right. Each panel contains related information and actions, allowing users to easily navigate and interact with the content. + +{{ image("concepts/ui_panels.png", "Page Panels") }} + +#### Collapse Panels + +The panel sidebar can be collapsed to provide more space for the main content area. To collapse or expand the panel sidebar, click the collapse icon located at the bottom of the sidebar. To expand the sidebar again, click the expand icon that appears when the sidebar is collapsed. + +### Breadcrumbs + +On some pages, a breadcrumb navigation trail is provided at the top of the page, just below the main menu. Breadcrumbs provide a visual representation of the user's current location within the system and allow for easy navigation back to previous pages. + +{{ image("concepts/ui_breadcrumbs.png", "Breadcrumb Navigation") }} + +### Navigation Tree + +On some pages, a navigation tree is provided on the left-hand side of the page, next to the breadcrumbs. The navigation tree provides a hierarchical view of the current section of the system, allowing users to quickly navigate to related pages and sections. + +Click on the navigation tree icon to expand the tree and view the available navigation options: + +{{ image("concepts/ui_navigation_tree.png", "Navigation Tree") }} + +#### Searching + +The navigation tree includes a search bar at the top of the panel. Typing into the search bar filters the tree to show only entries that match the search query. When a search is active, all matching results are expanded and displayed in a flat list. Clearing the search field returns the tree to its normal browsing mode. + +#### Highlight Selected Entry + +The currently selected entry in the navigation tree is highlighted with a distinct background color, making it easy to identify the active page or section within the hierarchy. + +#### Auto-Expand to Selected Entry + +When the navigation tree is opened, it automatically expands to reveal the currently selected entry. All ancestor nodes in the hierarchy are expanded so the active entry is immediately visible, without requiring manual navigation through the tree. + +## Dashboard + +The dashboard provides a customizable landing page for users when they log in to the system. The dashboard can be configured to display a variety of widgets and information panels, providing users with quick access to important data and actions. + +{{ image("concepts/ui_dashboard.png", "Dashboard") }} + +### Editing Layout + +To edit the layout (add, remove, or rearrange widgets) of the dashboard, open the dashboard context menu (located at the top-right corner of the dashboard) and view the available options: + +{{ image("concepts/ui_dashboard_edit.png", "Dashboard Context Menu") }} + +### Custom Widgets + +In addition to the set of built-in widgets provided by InvenTree, custom dashboard widgets can be implemented using [plugins](../../plugins/mixins/ui.md#dashboard-items). This allows users to create personalized dashboard experiences tailored to their specific needs and workflows. + +## Tables + +Information throughout the InvenTree interface is often presented in tabular format. Table views support a wide range of features, including pagination, sorting, filtering, and data export. + +Read more about working with table views on the dedicated [Tables](./tables.md) page. + +## Preview Panels + +Rather than navigating directly to an item's detail page, clicking on a table row can instead open a "preview" drawer, providing a quick summary of that item without leaving the current view. + +Read more about this optional feature on the dedicated [Preview Panels](./preview_panels.md) page. + +## Forms + +Data entry and editing within InvenTree is typically performed through the use of forms, which provide a structured interface for inputting and modifying data. + +Read more about working with forms on the dedicated [Forms](./forms.md) page. + +## Global Search + +Accessible from the [main menu](#main-menu), the global search functionality allows users to quickly find specific items or information within the InvenTree system. + +Read more about the global search feature on the dedicated [Global Search](./global_search.md) page. + +## Spotlight + +The user interface features a "spotlight" search functionality, which provides a quick and efficient way to access common actions or navigate to specific pages within the InvenTree system. The spotlight search is designed to enhance user productivity by allowing users to quickly find and execute actions without needing to navigate through menus or remember specific page locations. + +{{ image("concepts/ui_spotlight.png", "Spotlight Search") }} + +### Open Spotlight + +To open the "spotlight" search, click on the "spotlight" icon located in the main menu at the top of the interface. This will open the spotlight search menu, allowing you to enter search queries and view available actions. + +Alternatively, the spotlight search can be opened using the keyboard shortcut `Ctrl + K` (or `Cmd + K` on macOS), providing a quick and convenient way to access the spotlight functionality without needing to click on the menu icon. + +### Disable Spotlight + +Users may opt to disable the spotlight search functionality if they do not find it useful or prefer not to use it. To disable the spotlight search, navigate to your [user settings](../../settings/user.md) and locate the option to disable the spotlight feature. Once disabled, the spotlight search will no longer be accessible from the main menu or via keyboard shortcuts. + +## Copy Button + +Many fields within the InvenTree user interface include a "copy" button, which allows users to quickly copy the value of that field to their clipboard. This is particularly useful for fields that contain important identifiers, such as part numbers, stock item codes, or other relevant data that may need to be easily copied and pasted elsewhere. + +!!! important "Secure Context" + The "copy" button functionality relies on the browser's clipboard API, which may not be available in all contexts (e.g. if the user is accessing the InvenTree interface via a non-https connection, or through an embedded iframe or a non-standard browser). In such cases, the "copy" button may not function as intended. + +## User Permissions + +Many aspects of the user interface are controlled by user permissions, which determine what actions and features are available to each user based on their assigned roles and permissions within the system. This allows for a highly customizable user experience, where different users can have access to different features and functionality based on their specific needs and responsibilities within the organization. + +If a user does not have permission to access a particular feature or section of the system, that feature will be hidden from their view in the user interface. This helps to ensure that users only see the features and information that are relevant to their role, reducing clutter and improving usability. + +## Language Support + +The InvenTree user interface supports multiple languages, allowing users to interact with the system in their preferred language. + +The default system language can be configured by the system administrator in the [server configuration options](../../start/config.md#basic-options). + +Additionally, users can select their preferred language in their [user settings](../../settings/user.md), allowing them to override the system default language with their own choice. This provides a personalized experience for each user, ensuring that they can interact with the system in the language they are most comfortable with. diff --git a/docs/docs/concepts/ui/preview_panels.md b/docs/docs/concepts/ui/preview_panels.md new file mode 100644 index 0000000000..1f16485417 --- /dev/null +++ b/docs/docs/concepts/ui/preview_panels.md @@ -0,0 +1,37 @@ +--- +title: Preview Panels +--- + +## Preview Panels + +Many [table views](./tables.md) in InvenTree link each row to the detail page for the underlying item. By default, clicking on a row navigates directly to that detail page. + +If the preview panel feature is enabled, clicking on a row instead opens a "preview" drawer on the right-hand side of the screen. The preview drawer displays a summary of the selected item, without navigating away from the current table view. + +{{ image("concepts/ui_preview_drawer.png", "Preview Drawer") }} + +## Enabling the Preview Panel + +The preview panel is disabled by default. It can be enabled on a per-user basis via the **Table Preview Panel** option, found in the *Display Options* tab of the [user settings](../../settings/user.md) page. + +## Using the Preview Panel + +Once enabled, clicking on a row in a supported table opens the preview drawer for that item, rather than navigating to its detail page. + +### Viewing Full Details + +The preview drawer title includes an arrow icon, linking to the full detail page for the previewed item. Click on the title (or the arrow icon) to navigate to the detail page and close the drawer. + +{{ image("concepts/ui_preview_details_link.png", "View Details Link") }} + +### Following Links + +Any link within the preview drawer (for example, a link to a related part or category) can be clicked to navigate directly to that page. The preview drawer closes automatically when a link is followed. + +### Bypassing the Preview + +To navigate directly to an item's detail page without opening the preview drawer, hold `Ctrl` (or `Cmd` on macOS) while clicking the row, or middle-click the row to open the detail page in a new tab. + +### Closing the Preview + +The preview drawer can be closed by clicking the close button, clicking outside the drawer, or pressing `Escape`. diff --git a/docs/docs/concepts/ui/tables.md b/docs/docs/concepts/ui/tables.md new file mode 100644 index 0000000000..a1ba89e020 --- /dev/null +++ b/docs/docs/concepts/ui/tables.md @@ -0,0 +1,149 @@ +--- +title: Tables +--- + +## Table Views + +Information throughout the InvenTree interface is often presented in tabular format, allowing users to easily view and interact with large datasets. Tables are designed to be flexible and customizable, providing a range of features to enhance the user experience. + +{{ image("concepts/ui_table.png", "Table View") }} + +### Pagination + +The pagination controls are located at the bottom of the table, allowing users to navigate through large datasets by moving between pages. Users can also adjust the number of rows displayed per page using the pagination settings. + +### Row Selection + +For tables where data selection is supported, a checkbox is provided at the left-hand side of each row, allowing users to select one or more rows for further actions. A master checkbox is also provided in the table header, allowing users to quickly select or deselect all rows in the table. + +!!! info "Pagination and Row Selection" + When using the "master select" checkbox to select all rows, only the rows on the current page will be selected. + +{{ image("concepts/ui_table_row_selection.png", "Row Selection") }} + +### Table Actions + +A particular table view may have a set of actions associated with it, which are typically located at the top-left corner of the table. These actions may include options for adding new entries, or performing bulk actions on [selected rows](#row-selection). + +{{ image("concepts/ui_table_actions.png", "Table Actions") }} + +### Searching + +Some tables support searching, allowing users to quickly find specific entries within the dataset. The search bar is located at the top-right corner of the table view: + +{{ image("concepts/ui_table_search.png", "Table Search") }} + +### Column Selection + +Some tables allow the user to toggle the visibility of certain columns to, enabling a more customized view of the data. + +Column selection is accessed via the "Select Columns" menu, located to the top-right of the table view: + +{{ image("concepts/ui_table_column_selection.png", "Column Selection") }} + +### Filtering + +The dataset (which is fetched dynamically from the server via an API request) can be filtered by providing query parameters to the API endpoint. + +Select the "table filters" button to open the filter selection menu + +{{ image("concepts/ui_table_filter_button.png", "Table Filter Button") }} + +{{ image("concepts/ui_table_filter_menu.png", "Table Filter Menu") }} + +Table filters are saved across browser sessions, allowing users to maintain their preferred filter settings when returning to the particular table view. + +#### Column Filters + +Many table columns expose an inline filter icon directly in the column header, providing a quick way to filter by that column without opening the full filter drawer. Columns that support filtering display a small filter icon alongside the column title. The icon is highlighted when a filter for that column is currently active, giving an at-a-glance indication of which columns have active filters. + +Clicking the icon opens a compact popover anchored to the column header: + +{{ image("concepts/ui_table_column_filter_popover.png", "Column Filter Popover") }} + +**Single-filter columns** — for columns linked to one filter (e.g. *Active*, *Has IPN*, *Status*), selecting a value immediately applies the filter and the popover closes automatically. + +**Range columns** — for columns that represent a range concept (e.g. *Start Date*, *Target Date*, *Creation Date*), the popover stays open and presents multiple controls — for example *before* and *after* date pickers — so both bounds can be set in a single interaction. + +Once a filter is active, the popover shows a badge with the current value and a remove button (red ×) instead of the value picker. Clicking the × clears only that column's filter. + +!!! info "Column filters and the filter drawer share the same state" + Filters applied via a column popover appear immediately in the filter drawer's active-filter list, and filters added through the drawer are reflected in the column icons. Clearing all filters from the drawer also removes any filters set via column popovers. + +#### Saved Filter Groups + +Frequently used combinations of filters can be saved as a named *filter group*, allowing them to be quickly recalled later without having to re-add each filter individually. + +The **Saved Filter Groups** panel is displayed at the bottom of the filter drawer. When one or more filters are active, a **Save current filters** button is available. Clicking it opens an inline name input — enter a name and press Enter (or click the confirm icon) to save the group. Press Escape or click the cancel icon to discard. + +{{ image("concepts/ui_table_filter_group.png", "Filter Groups") }} + +Previously saved filter groups are listed in the panel. Each entry shows the group name alongside two actions: + +- **Load** (green reload icon): Replaces the current active filters with the filters stored in that group. The table immediately re-fetches data using the restored filters. +- **Delete** (red × icon): Permanently removes the saved filter group. + +Saved filter groups are stored in the browser's local storage and are specific to each table or calendar view, so groups saved for one view are not available in another. They persist across local browser sessions until explicitly deleted. Filter groups are not shared to other devices. + +!!! info "Loading a filter group replaces active filters" + Loading a saved filter group replaces all currently active filters with those stored in the group. Any unsaved active filters will be overwritten. + +### Data Sorting + +Some table columns support data sorting, allowing the dataset to be sorted in ascending or descending order based on the values in that column. To sort a column, click on the column header. Clicking the column header again will toggle the sort order between ascending and descending. The current sort order is indicated by an arrow icon in the column header. + +{{ image("concepts/ui_table_sorting.png", "Data Sorting") }} + +### Data Export + +Some tables support downloading of the dataset in various formats (e.g. CSV, Excel, PDF). If data download is available for a given table, the "export data" button will be located at the top-right corner of the table view. + +This opens the "Export Data" form, which allows the user to select the desired file format for download, as well as any additional options related to the data export. + +{{ image("concepts/ui_table_download.png", "Data Download") }} + +### Row Actions + +In some tables, there may be specific actions associated with individual rows, allowing users to perform actions directly on a particular entry in the dataset. Row actions are typically accessed via an "actions" menu located at the right-hand side of each row. + +{{ image("concepts/ui_table_row_actions.png", "Row Actions") }} + +### Right-Click Context Menu + +For rows that support row actions, a right-click context menu is also available, providing quick access to the same set of actions without needing to click on the "actions" menu. + +{{ image("concepts/ui_table_context_menu.png", "Right-Click Context Menu") }} + +### Row Navigation + +For tables which reference other objects within the system, clicking on a row will navigate to the detail page for that particular entry. For example, clicking on a row in the "Part" table will navigate to the detail page for that specific part. + +If the [preview panel](./preview_panels.md) feature is enabled, clicking on a row instead opens a preview drawer for that entry, rather than navigating directly to its detail page. + +## Calendar Views + +Some [table views](#table-views) associated with various order types can be switched to a calendar view, which provides a visual representation of data based on date fields. The calendar view allows users to easily see and interact with data that is organized by date, such as scheduled tasks, events, or deadlines. + +To switch to the "calendar view" (for a table which supports it), click on the "calendar view" button located above and to the right of the table view: + +{{ image("concepts/ui_calendar_select.png", "Calendar View Button") }} + +This will display the data in a calendar format: + +{{ image("concepts/ui_calendar_view.png", "Calendar View") }} + +### Calendar Horizon + +The calendar view provides a configurable "horizon" setting, which allows users to adjust the number of months displayed in the calendar view. + +## Parametric Views + +Some [table views](#table-views) can be switched to a parametric view, which provides a visual representation of data based on specific parameters or attributes. The parametric view allows users to easily see and interact with data that is organized by certain characteristics, such as categories, types, or other relevant attributes. + +To switch to the "parametric view" (for a table which supports it), click on the "parametric view" button located above and to the right of the table view: + +{{ image("concepts/ui_parametric_select.png", "Parametric View Button") }} + +This will display the data in a parametric format: + +{{ image("concepts/ui_parametric_view.png", "Parametric View") }} diff --git a/docs/docs/concepts/user_interface.md b/docs/docs/concepts/user_interface.md deleted file mode 100644 index 80f9f231c2..0000000000 --- a/docs/docs/concepts/user_interface.md +++ /dev/null @@ -1,355 +0,0 @@ ---- -title: User Interface ---- - -## User Interface - -The InvenTree user interface is designed to be intuitive and user-friendly, providing easy access to the various features and functions of the system. The interface is organized into several key components, including navigation menus, settings, forms, tables, search functionality, and more. - -The interface is designed for large-format displays, and as such is explicitly *not* optimized for mobile devices. However, the interface is responsive and should work on a wide range of desktop screen sizes. - -## Navigation - -Navigation throughout the InvenTree interface is designed to be straightforward and efficient, allowing users to quickly access the various sections and features of the system. The navigation is organized into several key areas, including the main menu, navigation menu, and page panels. - -### Main Menu - -The main menu is located at the top of the interface and provides access to the primary sections of the system: - -{{ image("concepts/ui_main_menu.png", "Main Menu") }} - -From the main menu, users can access the following items: - -- [Navigation Menu](#navigation-menu) -- [Dashboard](#dashboard) -- [Global Search](#search) -- [Spotlight](#spotlight) -- [Barcode Scanning](#barcode-scanning) -- [Notifications](#notifications) -- [User Menu](#user-menu) - -As well as allowing navigation to the following main sections: - -- [Parts](../part/index.md) -- [Stock](../stock/index.md) -- [Manufacturing](../manufacturing/index.md) -- [Purchasing](../purchasing/index.md) -- [Sales](../sales/index.md) - -### Navigation Menu - -The global navigation menu is located on the left-hand side of the interface and provides access to the various sections of the system. - -{{ image("concepts/ui_navigation_menu.png", "Navigation Menu") }} - -The navigation menu is organized into several key areas, including: - -- **Navigation:** Provides access to the main sections of the system, including Parts, Stock, Manufacturing, Purchasing, and Sales. -- **Settings:** Quick access to user settings, system settings, and the admin interface. -- **Actions:** Provides quick access to commonly used actions -- **Documentation:** Links to the online documentation. -- **About:** InvenTree version and license information. - -### User Menu - -The user menu is located in the top-right corner of the interface and provides access to user-specific settings and actions. - -{{ image("concepts/ui_user_menu.png", "User Menu") }} - -The user menu provides access to the following items: - -- **User Settings:** Access to [user settings](../settings/user.md). -- **System Settings:** Access to [global settings](../settings/global.md) settings. *Note: Access to system settings may be restricted based on user permissions.* -- **Admin Interface:** Access to the [admin interface](../settings/admin.md) for data management. *Note: Access to the admin interface may be restricted based on user permissions.* -- **Change Color Mode:** Toggle between light and dark color modes. -- **About InvenTree:** View version and license information about InvenTree. -- **Logout:** Log out of the InvenTree system. - -### Page Panels - -Most detail pages views within InvenTree are organized into panels, which provide a structured layout for displaying information and actions related to the current page. - -Panels are arranged in a vertical stack on the left side of the page, with the main content area on the right. Each panel contains related information and actions, allowing users to easily navigate and interact with the content. - -{{ image("concepts/ui_panels.png", "Page Panels") }} - -#### Collapse Panels - -The panel sidebar can be collapsed to provide more space for the main content area. To collapse or expand the panel sidebar, click the collapse icon located at the bottom of the sidebar. To expand the sidebar again, click the expand icon that appears when the sidebar is collapsed. - -### Breadcrumbs - -On some pages, a breadcrumb navigation trail is provided at the top of the page, just below the main menu. Breadcrumbs provide a visual representation of the user's current location within the system and allow for easy navigation back to previous pages. - -{{ image("concepts/ui_breadcrumbs.png", "Breadcrumb Navigation") }} - -### Navigation Tree - -On some pages, a navigation tree is provided on the left-hand side of the page, next to the breadcrumbs. The navigation tree provides a hierarchical view of the current section of the system, allowing users to quickly navigate to related pages and sections. - -Click on the navigation tree icon to expand the tree and view the available navigation options: - -{{ image("concepts/ui_navigation_tree.png", "Navigation Tree") }} - -#### Searching - -The navigation tree includes a search bar at the top of the panel. Typing into the search bar filters the tree to show only entries that match the search query. When a search is active, all matching results are expanded and displayed in a flat list. Clearing the search field returns the tree to its normal browsing mode. - -#### Highlight Selected Entry - -The currently selected entry in the navigation tree is highlighted with a distinct background color, making it easy to identify the active page or section within the hierarchy. - -#### Auto-Expand to Selected Entry - -When the navigation tree is opened, it automatically expands to reveal the currently selected entry. All ancestor nodes in the hierarchy are expanded so the active entry is immediately visible, without requiring manual navigation through the tree. - -## Dashboard - -The dashboard provides a customizable landing page for users when they log in to the system. The dashboard can be configured to display a variety of widgets and information panels, providing users with quick access to important data and actions. - -{{ image("concepts/ui_dashboard.png", "Dashboard") }} - -### Editing Layout - -To edit the layout (add, remove, or rearrange widgets) of the dashboard, open the dashboard context menu (located at the top-right corner of the dashboard) and view the available options: - -{{ image("concepts/ui_dashboard_edit.png", "Dashboard Context Menu") }} - -### Custom Widgets - -In addition to the set of built-in widgets provided by InvenTree, custom dashboard widgets can be implemented using [plugins](../plugins/mixins/ui.md#dashboard-items). This allows users to create personalized dashboard experiences tailored to their specific needs and workflows. - -## Table Views - -Information throughout the InvenTree interface is often presented in tabular format, allowing users to easily view and interact with large datasets. Tables are designed to be flexible and customizable, providing a range of features to enhance the user experience. - -{{ image("concepts/ui_table.png", "Table View") }} - -### Pagination - -The pagination controls are located at the bottom of the table, allowing users to navigate through large datasets by moving between pages. Users can also adjust the number of rows displayed per page using the pagination settings. - -### Row Selection - -For tables where data selection is supported, a checkbox is provided at the left-hand side of each row, allowing users to select one or more rows for further actions. A master checkbox is also provided in the table header, allowing users to quickly select or deselect all rows in the table. - -!!! info "Pagination and Row Selection" - When using the "master select" checkbox to select all rows, only the rows on the current page will be selected. - -{{ image("concepts/ui_table_row_selection.png", "Row Selection") }} - -### Table Actions - -A particular table view may have a set of actions associated with it, which are typically located at the top-left corner of the table. These actions may include options for adding new entries, or performing bulk actions on [selected rows](#row-selection). - -{{ image("concepts/ui_table_actions.png", "Table Actions") }} - -### Searching - -Some tables support searching, allowing users to quickly find specific entries within the dataset. The search bar is located at the top-right corner of the table view: - -{{ image("concepts/ui_table_search.png", "Table Search") }} - -### Column Selection - -Some tables allow the user to toggle the visibility of certain columns to, enabling a more customized view of the data. - -Column selection is accessed via the "Select Columns" menu, located to the top-right of the table view: - -{{ image("concepts/ui_table_column_selection.png", "Column Selection") }} - -### Filtering - -The dataset (which is fetched dynamically from the server via an API request) can be filtered by providing query parameters to the API endpoint. - -Select the "table filters" button to open the filter selection menu - -{{ image("concepts/ui_table_filter_button.png", "Table Filter Button") }} - -{{ image("concepts/ui_table_filter_menu.png", "Table Filter Menu") }} - -Table filters are saved across browser sessions, allowing users to maintain their preferred filter settings when returning to the particular table view. - -#### Column Filters - -Many table columns expose an inline filter icon directly in the column header, providing a quick way to filter by that column without opening the full filter drawer. Columns that support filtering display a small filter icon alongside the column title. The icon is highlighted when a filter for that column is currently active, giving an at-a-glance indication of which columns have active filters. - -Clicking the icon opens a compact popover anchored to the column header: - -{{ image("concepts/ui_table_column_filter_popover.png", "Column Filter Popover") }} - -**Single-filter columns** — for columns linked to one filter (e.g. *Active*, *Has IPN*, *Status*), selecting a value immediately applies the filter and the popover closes automatically. - -**Range columns** — for columns that represent a range concept (e.g. *Start Date*, *Target Date*, *Creation Date*), the popover stays open and presents multiple controls — for example *before* and *after* date pickers — so both bounds can be set in a single interaction. - -Once a filter is active, the popover shows a badge with the current value and a remove button (red ×) instead of the value picker. Clicking the × clears only that column's filter. - -!!! info "Column filters and the filter drawer share the same state" - Filters applied via a column popover appear immediately in the filter drawer's active-filter list, and filters added through the drawer are reflected in the column icons. Clearing all filters from the drawer also removes any filters set via column popovers. - -#### Saved Filter Groups - -Frequently used combinations of filters can be saved as a named *filter group*, allowing them to be quickly recalled later without having to re-add each filter individually. - -The **Saved Filter Groups** panel is displayed at the bottom of the filter drawer. When one or more filters are active, a **Save current filters** button is available. Clicking it opens an inline name input — enter a name and press Enter (or click the confirm icon) to save the group. Press Escape or click the cancel icon to discard. - -{{ image("concepts/ui_table_filter_group.png", "Filter Groups") }} - -Previously saved filter groups are listed in the panel. Each entry shows the group name alongside two actions: - -- **Load** (green reload icon): Replaces the current active filters with the filters stored in that group. The table immediately re-fetches data using the restored filters. -- **Delete** (red × icon): Permanently removes the saved filter group. - -Saved filter groups are stored in the browser's local storage and are specific to each table or calendar view, so groups saved for one view are not available in another. They persist across local browser sessions until explicitly deleted. Filter groups are not shared to other devices. - -!!! info "Loading a filter group replaces active filters" - Loading a saved filter group replaces all currently active filters with those stored in the group. Any unsaved active filters will be overwritten. - -### Data Sorting - -Some table columns support data sorting, allowing the dataset to be sorted in ascending or descending order based on the values in that column. To sort a column, click on the column header. Clicking the column header again will toggle the sort order between ascending and descending. The current sort order is indicated by an arrow icon in the column header. - -{{ image("concepts/ui_table_sorting.png", "Data Sorting") }} - -### Data Export - -Some tables support downloading of the dataset in various formats (e.g. CSV, Excel, PDF). If data download is available for a given table, the "export data" button will be located at the top-right corner of the table view. - -This opens the "Export Data" form, which allows the user to select the desired file format for download, as well as any additional options related to the data export. - -{{ image("concepts/ui_table_download.png", "Data Download") }} - -### Row Actions - -In some tables, there may be specific actions associated with individual rows, allowing users to perform actions directly on a particular entry in the dataset. Row actions are typically accessed via an "actions" menu located at the right-hand side of each row. - -{{ image("concepts/ui_table_row_actions.png", "Row Actions") }} - -### Right-Click Context Menu - -For rows that support row actions, a right-click context menu is also available, providing quick access to the same set of actions without needing to click on the "actions" menu. - -{{ image("concepts/ui_table_context_menu.png", "Right-Click Context Menu") }} - -### Row Navigation - -For tables which reference other objects within the system, clicking on a row will navigate to the detail page for that particular entry. For example, clicking on a row in the "Part" table will navigate to the detail page for that specific part. - -## Calendar Views - -Some [table views](#table-views) associated with various order types can be switched to a calendar view, which provides a visual representation of data based on date fields. The calendar view allows users to easily see and interact with data that is organized by date, such as scheduled tasks, events, or deadlines. - -To switch to the "calendar view" (for a table which supports it), click on the "calendar view" button located above and to the right of the table view: - -{{ image("concepts/ui_calendar_select.png", "Calendar View Button") }} - -This will display the data in a calendar format: - -{{ image("concepts/ui_calendar_view.png", "Calendar View") }} - -### Calendar Horizon - -The calendar view provides a configurable "horizon" setting, which allows users to adjust the number of months displayed in the calendar view. - -## Parametric Views - -Some [table views](#table-views) can be switched to a parametric view, which provides a visual representation of data based on specific parameters or attributes. The parametric view allows users to easily see and interact with data that is organized by certain characteristics, such as categories, types, or other relevant attributes. - -To switch to the "parametric view" (for a table which supports it), click on the "parametric view" button located above and to the right of the table view: - -{{ image("concepts/ui_parametric_select.png", "Parametric View Button") }} - -This will display the data in a parametric format: - -{{ image("concepts/ui_parametric_view.png", "Parametric View") }} - -## Forms - -Data entry and editing within InvenTree is typically performed through the use of forms, which provide a structured interface for inputting and modifying data. Forms are designed to be user-friendly and efficient, allowing users to quickly enter and update information within the system. - -Forms are typically displayed as a modal dialog, separated into multiple sections and fields. - -### Data Creation - -Example: Creating a new part via the "Add Part" form: - -{{ image("concepts/ui_form_add_part.png", "Add Part Button") }} - -On several forms is displayed option "Keep form open" in bottom part of the form on left side of Submit button (option is visible on the screenshot above). When this switch is turned on, form window is not closed after submit and filled form data is not reset. This is useful for creating more entries at one time with similar properties (e.g. only different number in name). - -### Data Editing - -Example: Editing an existing purchase order via the "Edit Purchase Order" form: - -{{ image("concepts/ui_form_edit_po.png", "Edit Purchase Order") }} - -### Confirm Actions - -Many actions within InvenTree require user confirmation before they can be executed. This is typically implemented through the use of confirmation dialogs, which prompt the user to confirm their intention before proceeding with the action. - -{{ image("concepts/ui_form_hold_po.png", "Confirmation Dialog") }} - -## Global Search - -Accessible from the [main menu](#main-menu), the global search functionality allows users to quickly find specific items or information within the InvenTree system. The search icon is located at the top of the interface and provides a convenient way to search across all sections of the system. - -Clicking on the "search" icon (in the menu bar) opens the search menu, which allows users to enter search queries and view results from across the system. - -{{ image("concepts/ui_global_search.png", "Global Search") }} - -Search results are organized by category (e.g. Parts, Stock, Manufacturing, etc.) and provide quick access to the relevant pages for each search result. - -### Detail View - -To navigate to the detail page for a particular search result, simply click on the desired result from the search results list. This will take you directly to the relevant page within the InvenTree system, allowing you to view and interact with the specific item or information you were searching for. - -### Full Results - -The "global search" menu provides a limited set of search results for each category, typically showing the most relevant or recent results. To view the full set of search results for a particular category, click on the "View all results" button located at the top-left of the search results list for that category: - -{{ image("concepts/ui_global_search_view_all.png", "View Full Search Results") }} - -### Collapse Result Groups - -To collapse a particular category of search results in the global search menu, click on the "collapse" icon located at the top-right corner of the search results list for that category. This will hide the search results for that category, allowing you to focus on other categories or search results. - -### Remove Result Groups - -To remove a particular category of search results from the global search menu, click on the "remove" icon located at the top-right corner of the search results list for that category. - -## Spotlight - -The user interface features a "spotlight" search functionality, which provides a quick and efficient way to access common actions or navigate to specific pages within the InvenTree system. The spotlight search is designed to enhance user productivity by allowing users to quickly find and execute actions without needing to navigate through menus or remember specific page locations. - -{{ image("concepts/ui_spotlight.png", "Spotlight Search") }} - -### Open Spotlight - -To open the "spotlight" search, click on the "spotlight" icon located in the main menu at the top of the interface. This will open the spotlight search menu, allowing you to enter search queries and view available actions. - -Alternatively, the spotlight search can be opened using the keyboard shortcut `Ctrl + K` (or `Cmd + K` on macOS), providing a quick and convenient way to access the spotlight functionality without needing to click on the menu icon. - -### Disable Spotlight - -Users may opt to disable the spotlight search functionality if they do not find it useful or prefer not to use it. To disable the spotlight search, navigate to your [user settings](../settings/user.md) and locate the option to disable the spotlight feature. Once disabled, the spotlight search will no longer be accessible from the main menu or via keyboard shortcuts. - -## Copy Button - -Many fields within the InvenTree user interface include a "copy" button, which allows users to quickly copy the value of that field to their clipboard. This is particularly useful for fields that contain important identifiers, such as part numbers, stock item codes, or other relevant data that may need to be easily copied and pasted elsewhere. - -!!! important "Secure Context" - The "copy" button functionality relies on the browser's clipboard API, which may not be available in all contexts (e.g. if the user is accessing the InvenTree interface via a non-https connection, or through an embedded iframe or a non-standard browser). In such cases, the "copy" button may not function as intended. - -## User Permissions - -Many aspects of the user interface are controlled by user permissions, which determine what actions and features are available to each user based on their assigned roles and permissions within the system. This allows for a highly customizable user experience, where different users can have access to different features and functionality based on their specific needs and responsibilities within the organization. - -If a user does not have permission to access a particular feature or section of the system, that feature will be hidden from their view in the user interface. This helps to ensure that users only see the features and information that are relevant to their role, reducing clutter and improving usability. - -## Language Support - -The InvenTree user interface supports multiple languages, allowing users to interact with the system in their preferred language. - -The default system language can be configured by the system administrator in the [server configuration options](../start/config.md#basic-options). - -Additionally, users can select their preferred language in their [user settings](../settings/user.md), allowing them to override the system default language with their own choice. This provides a personalized experience for each user, ensuring that they can interact with the system in the language they are most comfortable with. diff --git a/docs/docs/develop/contributing.md b/docs/docs/develop/contributing.md index 181ae3ab02..c27d1d5801 100644 --- a/docs/docs/develop/contributing.md +++ b/docs/docs/develop/contributing.md @@ -184,7 +184,7 @@ django-upgrade --target-version {{ config.extra.django_version }} `find . -name ## Migration Files -Any required migration files **must** be included in the commit, or the pull-request will be rejected. If you change the underlying database schema, make sure you run `invoke migrate` and commit the migration files before submitting the PR. +Any required migration files **must** be included in the commit, or the pull-request will be rejected. If you change the underlying database schema, make sure you run `invoke migrate --detect` and commit the migration files before submitting the PR. *Note: A github action checks for unstaged migration files and will reject the PR if it finds any!* diff --git a/docs/docs/manufacturing/index.md b/docs/docs/manufacturing/index.md index 433f375e38..711241004e 100644 --- a/docs/docs/manufacturing/index.md +++ b/docs/docs/manufacturing/index.md @@ -23,3 +23,9 @@ Read more about build orders in the [Build Order documentation](./build.md). InvenTree allows users to allocate stock items to specific build orders, ensuring that the required components are reserved for production. This helps to prevent stock shortages and ensures that the right parts are available when needed. Read more about stock allocation in the [Stock Allocation documentation](./allocate.md). + +### Disassembly + +The reverse process is also supported - an assembled stock item can be broken back down into its component parts, based on its BOM. This is useful for reworking or scrapping an assembly, or for splitting a bundled "kit" product purchased from a supplier into its individual components. + +Read more about this process in the [Stock Disassembly documentation](../stock/disassemble.md). diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md index 842e2133e5..46f1c1d669 100644 --- a/docs/docs/part/create.md +++ b/docs/docs/part/create.md @@ -85,4 +85,4 @@ In addition to the primary methods for creating or importing part data, the foll - [Via the REST API](../api/index.md) - [Using the Python library](../api/python/index.md) -- [Within the Admin interface](../settings/admin.md) +- [Within the Database Admin interface](../settings/db_admin.md) diff --git a/docs/docs/part/index.md b/docs/docs/part/index.md index c6fcd2ab89..b3ca3f4994 100644 --- a/docs/docs/part/index.md +++ b/docs/docs/part/index.md @@ -53,6 +53,8 @@ A *Template* part is one which can have *variants* which exist underneath it. [R If a part is designated as an *Assembly* it can be created (or built) from other component parts. As an example, a circuit board assembly is made using multiple electronic components, which are tracked in the system. An *Assembly* Part has a Bill of Materials (BOM) which lists all the required sub-components. [Read further information about BOM management here](../manufacturing/bom.md). +An assembled stock item can also be broken back down into its component parts, using the [disassembly](../stock/disassemble.md) process. + ### Component If a part is designated as a *Component* it can be used as a sub-component of an *Assembly*. [Read further information about BOM management here](../manufacturing/bom.md) diff --git a/docs/docs/part/notification.md b/docs/docs/part/notification.md index 7ca8d36aa3..33e131c347 100644 --- a/docs/docs/part/notification.md +++ b/docs/docs/part/notification.md @@ -7,7 +7,7 @@ title: Part Notifications Users can select to receive notifications when certain events occur. !!! warning "Email Configuration Required" - External notifications require correct [email configuration](../start/config.md#email-settings). They also need to be enabled in the settings under notifications`. + External notifications require correct [email configuration](../start/config.md#email-settings). They also need to be enabled in the settings under *Notifications*. !!! warning "Valid Email Address" Each user must have a valid email address associated with their account to receive email notifications diff --git a/docs/docs/part/pricing.md b/docs/docs/part/pricing.md index 1f19c82958..f11db486d5 100644 --- a/docs/docs/part/pricing.md +++ b/docs/docs/part/pricing.md @@ -51,7 +51,7 @@ Each price range is calculated in the [Default Currency](../concepts/pricing.md# Price range data is [cached in the database](#price-data-caching) when underlying pricing information changes. !!! tip "Refresh Pricing" - While pricing data is [automatically updated](#data-updates), the user can also manually refresh the pricing calculations manually, by pressing the "Refresh" button in the overview section. + While pricing data is [automatically updated](#pricing-updates), the user can also manually refresh the pricing calculations manually, by pressing the "Refresh" button in the overview section. #### Overall Pricing diff --git a/docs/docs/part/stocktake.md b/docs/docs/part/stocktake.md index a226587b91..f6067fb23c 100644 --- a/docs/docs/part/stocktake.md +++ b/docs/docs/part/stocktake.md @@ -41,7 +41,7 @@ If this tab is not visible, ensure that the *Enable Stock History* [user setting ### Stocktake Entry Generation -By default, stocktake entries are generated automatically at regular intervals (see [settings](#stock-history-settings) below). However, users can generate a stocktake entry on demand, using the *Generate Stocktake Entry* button in the *Stock History* tab: +By default, stocktake entries are generated automatically at regular intervals (see [settings](#stocktake-settings) below). However, users can generate a stocktake entry on demand, using the *Generate Stocktake Entry* button in the *Stock History* tab: {{ image("part/part_stocktake_manual.png", "Generate stocktake entry") }} @@ -95,7 +95,7 @@ Enable or disable stocktake functionality. Note that by default, stocktake funct ### Automatic Stocktake Period -Configure the number of days between generation of [automatic stocktake reports](#automatic-stocktake). If this value is set to zero, automatic stocktake reports will not be generated. +Configure the number of days between generation of [automatic stocktake entries](#stocktake-entry-generation). If this value is set to zero, automatic stocktake entries will not be generated. ### Delete Old Stocktake Entries diff --git a/docs/docs/part/views.md b/docs/docs/part/views.md index 8867c7a44e..e16e8c0b81 100644 --- a/docs/docs/part/views.md +++ b/docs/docs/part/views.md @@ -8,7 +8,7 @@ The Part detail view page provides a detailed view of a single part in the syste ### Category Breadcrumb List -The categories of each part is displayed on the top navigation bar as show in the above screenshot. +The categories of each part is displayed on the top navigation bar. [Click here](./index.md#part-category) for more information about categories. ## Part Details @@ -83,6 +83,10 @@ The *Build Orders* tab shows a list of the builds for this part. It provides a v The *Used In* tab displays a list of other parts that this part is used to make. This tab is only visible if the Part is a *component*. +### Part Pricing + +The *Part Pricing* tab displays all available pricing information for the part, aggregated from multiple sources (internal pricing, supplier pricing, purchase history, BOM pricing, sale pricing, etc). Refer to the [part pricing documentation](./pricing.md) for further information. + ### Suppliers The *Suppliers* tab displays all the *Part Suppliers* and *Part Manufacturers* for the selected *Part*. @@ -101,6 +105,14 @@ This tab is only displayed if the part is marked as *Purchaseable*. The *Sales Orders* tab shows a list of the sales orders for this part. It provides a view for important sales order information like customer, status, creation and shipment dates. +### Return Orders + +The *Return Orders* tab shows a list of the [return orders](../sales/return_order.md) which reference this part. This tab is only visible if the Part is marked as *Salable*, and the return order feature is enabled. + +### Transfer Orders + +The *Transfer Orders* tab shows a list of the [transfer orders](../stock/transfer_order.md) which reference this part. This tab is hidden if the Part is marked as *Virtual*, or the transfer order feature is not enabled. + ### Stock History The *Stock History* tab provide historical stock level information. Refer to the [stock history documentation](./stocktake.md) for further information. @@ -109,6 +121,10 @@ The *Stock History* tab provide historical stock level information. Refer to the If a part is marked as *testable*, the user can define tests which must be performed on any stock items which are instances of this part. [Read more about testing](./test.md). +### Test Results + +The *Test Results* tab displays [test result](../stock/test.md) data uploaded against *any* stock item of this part, aggregated into a single table. This differs from the *Test Templates* tab, which configures the tests themselves rather than displaying recorded results. This tab is only visible if the part is marked as *testable*. + ### Related Parts Related Part denotes a relationship between two parts, when users want to show their usage is "related" to another part or simply emphasize a link between two parts. diff --git a/docs/docs/plugins/develop.md b/docs/docs/plugins/develop.md index 77b9a17975..162448dbc2 100644 --- a/docs/docs/plugins/develop.md +++ b/docs/docs/plugins/develop.md @@ -113,10 +113,10 @@ Refer to the [sample plugins]({{ sourcedir("src/backend/InvenTree/plugin/samples A *PluginConfig* database entry will be created for each plugin "discovered" when the server launches. This configuration entry is used to determine if a particular plugin is enabled. -The configuration entries must be enabled via the [InvenTree admin interface](../settings/admin.md). +The configuration entries must be enabled via the [Admin Center](../settings/admin.md#admin-center). !!! warning "Disabled by Default" - Newly discovered plugins are disabled by default, and must be manually enabled (in the admin interface) by a user with staff privileges. + Newly discovered plugins are disabled by default, and must be manually enabled (in the Admin Center) by a user with staff privileges. ## Plugin Mixins diff --git a/docs/docs/plugins/walkthrough.md b/docs/docs/plugins/walkthrough.md index 5fe885e233..863e02a39b 100644 --- a/docs/docs/plugins/walkthrough.md +++ b/docs/docs/plugins/walkthrough.md @@ -74,7 +74,7 @@ npm install npm run build ``` -Copy the built `attachment_carousel` directory to the `inventree-data/plugins` directory and enable it via the admin interface. +Copy the built `attachment_carousel` directory to the `inventree-data/plugins` directory and enable it via the [Admin Center](../settings/admin.md#admin-center). ![Attachment Carousel in Inventree panel screenshot](../assets/images/plugin/plugin_walkthrough_default.png "Attachment Carousel in Inventree panel screenshot") diff --git a/docs/docs/purchasing/purchase_order.md b/docs/docs/purchasing/purchase_order.md index 89d6a9194c..fd2cfacb77 100644 --- a/docs/docs/purchasing/purchase_order.md +++ b/docs/docs/purchasing/purchase_order.md @@ -135,6 +135,22 @@ The unit cost of the purchase order line item is transferred across to the creat However, if the [Convert Currency](#purchase-order-settings) setting is enabled, the currency of the stock item will be converted to the [default currency](../concepts/pricing.md#default-currency) of the system. This may be useful when ordering stock in a different currency, to ensure that the unit cost of the stock item is converted to the base currency at the time of receipt. +## Bundled Items + +Some suppliers only sell a group of components as a single bundled or "kit" product, rather than as individual purchasable line items - for example, a fastener kit containing an assortment of different screws, or a "starter kit" containing several components required for a particular use case. + +Rather than receiving the bundle as a single opaque stock quantity, InvenTree allows the bundle to be modelled as an assembly, so that it can be broken apart into its individual components once required: + +1. Create a part to represent the bundle itself, and mark it as an [assembly](../part/index.md#assembly) +2. Link a [supplier part](./supplier.md#supplier-parts) to the bundle part, representing how it is purchased from the supplier +3. Define a [Bill of Materials](../manufacturing/bom.md) for the bundle part, listing each of the individual components and the quantity contained within a single bundle +4. Create and receive a purchase order against the bundle's supplier part, as normal - a single stock item is created for the bundle, retaining the purchase price and source purchase order of the order as a whole + +Once the individual components are actually required, the received bundle stock item can be [disassembled](../stock/disassemble.md) into its component parts. The purchase price and traceability data (batch code, source purchase order) of the original bundle are automatically apportioned across the newly generated component stock items. + +!!! tip "Pack Size vs Bundled Items" + A supplier part with a [pack size](./supplier.md#supplier-part-pack-size) greater than one still represents multiple units of the *same* part - the pack size simply determines how many physical units are added to stock per unit ordered. A *bundled* item is different: a single supplier part represents an assortment of *different* components, which must be disassembled before the individual components can be used or sold separately. + ## Complete Order Once the quantity of all __received__ items is equal or above the quantity of all line items, the order will be automatically marked as __complete__. diff --git a/docs/docs/purchasing/supplier.md b/docs/docs/purchasing/supplier.md index 14808d492d..57d209d77a 100644 --- a/docs/docs/purchasing/supplier.md +++ b/docs/docs/purchasing/supplier.md @@ -89,3 +89,6 @@ Supplier parts can have a pack size defined. This value is defined when creating When buying parts, they are bought in packs. This is taken into account in Purchase Orders: if a supplier part with a pack size of 5 is bought in a quantity of 4, 20 parts will be added to stock when the parts are received. When adding stock manually, the supplier part can be added in packs or in individual parts. This is to allow the addition of items in opened packages. Set the flag "Use pack size" (`use_pack_size` in the API) to True in order to add parts in packs. + +!!! tip "Bundled Items" + A pack size only ever represents multiple units of the *same* part. If a supplier instead sells a kit or assortment of *different* components as a single purchasable item, refer to the [bundled items](./purchase_order.md#bundled-items) documentation instead. diff --git a/docs/docs/report/context_variables.md b/docs/docs/report/context_variables.md index 7fc365fda1..cead76c138 100644 --- a/docs/docs/report/context_variables.md +++ b/docs/docs/report/context_variables.md @@ -286,7 +286,7 @@ Each part object has access to a lot of context variables about the part. The fo | icon | The name of the icon if set, e.g. fas fa-warehouse | | item_count | Simply returns the number of stock items in this location | | name | The name of the location. This is only the name of this location, not the path | -| owner | The owner of the location if it has one. The owner can only be assigned in the admin interface | +| owner | The owner of the location if it has one | | parent | The parent location. Returns None if it is already the top most one | | path | A queryset of locations that contains the hierarchy starting from the top most parent | | pathstring | A string that contains all names of the path separated by slashes e.g. A/B/C | @@ -307,8 +307,8 @@ Each part object has access to a lot of context variables about the part. The fo | contact | Contact Name | | phone | Contact phone number | | email | Contact email address | -| link | A second URL to the company (Actually only accessible in the admin interface) | -| notes | Extra notes about the company (Actually only accessible in the admin interface) | +| link | URL associated with the company | +| notes | Extra notes about the company | | is_customer | Boolean value, is this company a customer | | is_supplier | Boolean value, is this company a supplier | | is_manufacturer | Boolean value, is this company a manufacturer | diff --git a/docs/docs/report/index.md b/docs/docs/report/index.md index 39fafdacc0..7b3d3efe7f 100644 --- a/docs/docs/report/index.md +++ b/docs/docs/report/index.md @@ -65,8 +65,8 @@ Label and report templates are created and edited using the built-in [template e !!! tip "Staff Access Only" Only users with staff access can create, upload or edit templates, snippets and assets. -!!! info "Backend Admin Interface" - Templates can also be managed at a lower level via the [backend admin interface](../settings/admin.md#backend-admin-interface), under the *Report* section. This is recommended for advanced users only. +!!! info "Database Admin Interface" + Templates can also be managed at a lower level via the [Database Admin interface](../settings/db_admin.md), under the *Report* section. This is recommended for advanced users only. ### Name and Description diff --git a/docs/docs/settings/MFA.md b/docs/docs/settings/MFA.md index feccabc87f..80d8c4c526 100644 --- a/docs/docs/settings/MFA.md +++ b/docs/docs/settings/MFA.md @@ -16,4 +16,4 @@ To make MFA mandatory for all users: ### Security Consideration -A user can lock themselves out if they lose access to both the device with their TOTP app and their backup tokens. An admin can delete their tokens from the admin pages (they exist under the 'TOTP devices' / 'static devices' models) . This should be a last resort and only done by people knowledgeable about the [admin pages](../settings/admin.md) as changes there might circumvent InvenTree's business and security logic. +A user can lock themselves out if they lose access to both the device with their TOTP app and their backup tokens. An admin can delete their tokens from the Database Admin interface (they exist under the 'TOTP devices' / 'static devices' models). This should be a last resort and only done by people knowledgeable about the [Database Admin interface](../settings/db_admin.md), as changes there might circumvent InvenTree's business and security logic. diff --git a/docs/docs/settings/SSO.md b/docs/docs/settings/SSO.md index ab7d3a539c..611df18685 100644 --- a/docs/docs/settings/SSO.md +++ b/docs/docs/settings/SSO.md @@ -18,7 +18,7 @@ The basic requirements for configuring SSO are outlined below: 1. Enable backend for each required SSO provider(s) in the [config file or environment variables](../start/config.md#single-sign-on). 1. Create an external *app* with your provider of choice -1. Add the required client configurations in the `SocialApp` app in the [admin interface](../settings/admin.md). +1. Add the required client configurations in the `SocialApp` app in the [Database Admin interface](../settings/db_admin.md). 1. Configure the *callback* URL for the external app. 1. Enable SSO for the users in the [global settings](../settings/global.md). 1. Configure [e-mail](../settings/email.md). @@ -161,4 +161,4 @@ Make sure all users with admin privileges have sufficient passwords - they can r ## Error Handling -If you encounter an error during the SSO process, the error should be logged in the InvenTree database. You can view the [error log](./logs.md) in the [admin interface](./admin.md) to see the details of the error. +If you encounter an error during the SSO process, the error should be logged in the InvenTree database. You can view the [error log](./logs.md) in the [Admin Center](./admin.md#admin-center) to see the details of the error. diff --git a/docs/docs/settings/admin.md b/docs/docs/settings/admin.md index 039ba0e026..fc922e70e7 100644 --- a/docs/docs/settings/admin.md +++ b/docs/docs/settings/admin.md @@ -4,24 +4,23 @@ title: InvenTree Admin Interfaces ## InvenTree Admin Interfaces -There are multiple administration interfaces available in InvenTree, which provide different levels of access to the underlying resources and different operational safety. +InvenTree provides multiple administration interfaces with different safety levels and intended use cases. [**Admin Center**](#admin-center): -- Main interface for managing InvenTree -- Robust verification and safety checks +- Main administration interface for day-to-day operations +- Uses API-backed flows with validation and safety checks [**System Settings**](#system-settings): -- Access to all settings -- Robust verification, requires reading the documentation +- Access to global runtime settings +- Available to staff users (or users with equivalent API scope) -[**Backend Admin Interface**](#backend-admin-interface): +[**Database Admin Interface**](./db_admin.md): -- Low level access to the database -- Few verification or safety checks -- Requires knowledge of InvenTree internals -- Recommended for advanced users only +- Low-level database administration +- Fewer safeguards than the Admin Center +- Intended for advanced users and troubleshooting scenarios ### Admin Center @@ -34,7 +33,13 @@ The Admin Center is the main interface for managing InvenTree. It provides a use - Integration with external services (via machines and plugins) - Reporting and statistics -It can be access via the *Admin Center* link in the top right user menu, the *Admin Center* quick-link in the command palette, or via the navigation menu. +#### Access Admin Center + +The Admin Center can be accessed in any of the following ways: + +- User menu in the top-right corner: *Admin Center* +- Command palette quick action: *Admin Center* +- Direct URL: `/web/settings/admin` #### Permissions @@ -44,40 +49,6 @@ Some panes can only be accessed by users with specific permissions. For example, The System Settings interface provides ordered access to all global settings in InvenTree. Users need to have _staff_ privileges enabled or the _a:staff_ scope. -### Backend Admin Interface +### Database Admin Interface -Users which have *staff* privileges have access to an Admin interface which provides extremely low level control of the database. Every item in the database is available and this interface provides a unrestricted option for directly viewing and modifying database objects. - -!!! warning "Caution" - Admin users should exercise extreme care when modifying data via the admin interface, as performing the wrong action may have unintended consequences! - -The admin interface allows *staff* users the ability to directly view / add / edit / delete database entries according to their [user permissions](./permissions.md). - -#### Access Backend Admin Interface - -To directly access the admin interface, append /admin/ to the InvenTree site URL - e.g. http://localhost:8000/admin/. - -An administration panel will be presented as shown below: - -{{ image("admin/admin.png", "Admin panel") }} - -#### View Database Objects - -Database objects can be listed and filtered directly. The image below shows an example of displaying existing part categories. - -{{ image("admin/part_cats.png", "Part categories") }} - -!!! info "Permissions" - A "staff" account does not necessarily provide access to all administration options, depending on the roles assigned to the user. - -##### Filtering - -Some admin views support filtering of results against specified criteria. For example, the list of Part objects can be filtered as follows: - -{{ image("admin/filter.png", "Filter part list") }} - -#### Edit Database Objects - -Individual database objects can be edited directly in the admin interface. The image below shows an example of editing a Part object: - -{{ image("admin/edit_part.png", "Edit part") }} +For low-level administration tasks, use the [Database Admin Interface](./db_admin.md). diff --git a/docs/docs/settings/db_admin.md b/docs/docs/settings/db_admin.md new file mode 100644 index 0000000000..fc37ee487a --- /dev/null +++ b/docs/docs/settings/db_admin.md @@ -0,0 +1,54 @@ +--- +title: InvenTree Database Admin Interface +--- + +## Database Admin Interface + +The Database Admin interface provides low-level access to InvenTree database objects. + +!!! danger "Low-Level Interface" + The Database Admin bypasses many of the application-level safety checks used in the Admin Center. + Incorrect edits can create inconsistent data, break workflows, or expose security issues. + Use this interface only if you understand the data model and operational impact. + +!!! warning "Recommended Usage" + Prefer the [Admin Center](./admin.md#admin-center) for routine administration. + Use the Database Admin only for advanced administration and troubleshooting. + +### Access Database Admin Interface + +Access to the Database Admin requires a user account with *staff* privileges. + +Use one of the following methods: + +- Append `/admin/` to the base InvenTree URL (for example: `http://localhost:8000/admin/`) +- Use the configured administrator URL from `INVENTREE_ADMIN_URL` + +{{ image("admin/admin.png", "Database Admin panel") }} + +### Permissions + +A "staff" account does not necessarily provide access to all administration options, depending on the roles assigned to the user. + +### View Database Objects + +Database objects can be listed and filtered directly. The image below shows an example of displaying existing part categories. + +{{ image("admin/part_cats.png", "Part categories") }} + +#### Filtering + +Some admin views support filtering of results against specified criteria. For example, the list of Part objects can be filtered as follows: + +{{ image("admin/filter.png", "Filter part list") }} + +### Edit Database Objects + +Individual database objects can be edited directly in the Database Admin interface. The image below shows an example of editing a Part object: + +{{ image("admin/edit_part.png", "Edit part") }} + +!!! danger "Before You Save Changes" + Verify your changes carefully before saving. + If possible, test changes in a non-production environment first. + Record what you changed so it can be reviewed and reverted if needed. diff --git a/docs/docs/settings/logs.md b/docs/docs/settings/logs.md index d161ea1fe4..9a1561b086 100644 --- a/docs/docs/settings/logs.md +++ b/docs/docs/settings/logs.md @@ -1,22 +1,19 @@ --- -title: Admin Shell +title: Error Logs --- ## Error Logs -Any critical server error logs are recorded to the database, and can be viewed by staff users using the admin interface. +Any critical server error logs are recorded to the database, and can be viewed by staff users in the [Admin Center](./admin.md#admin-center), under the *Error Reports* section: -In the admin interface, select the "Errors" view: +{{ image("admin/admin_errors_link.png", "Error Reports in the Admin Center") }} -{{ image("admin/admin_errors_link.png", "Admin errors") }} - -!!! info "URL" - Alternatively, navigate to the error list view at /admin/error_report/error/ - -A list of error logs is presented. +A list of error logs is presented. Select an entry to view the full error details, including the traceback. {{ image("admin/admin_errors.png", "Error logs") }} +!!! info "Database Admin Interface" + Error logs can also be viewed via the [Database Admin interface](./db_admin.md), at the URL `/admin/error_report/error/` !!! info "Deleting Logs" Error logs should be deleted periodically diff --git a/docs/docs/settings/permissions.md b/docs/docs/settings/permissions.md index 6e169af8f5..e40b206672 100644 --- a/docs/docs/settings/permissions.md +++ b/docs/docs/settings/permissions.md @@ -7,7 +7,7 @@ title: User Permissions InvenTree provides access control to various features and data, by assigning each *user* to one (or more) *groups* which have multiple *roles* assigned. !!! info "Superuser" - The superuser account is afforded *all* permissions across an InvenTree installation. This includes the admin interface, web interface, and API. + The superuser account is afforded *all* permissions across an InvenTree installation. This includes the [Database Admin interface](./db_admin.md), web interface, and API. ### User @@ -54,7 +54,7 @@ Within each role, there are four levels of available permissions: ## Dangerous User Flags In addition to the above permissions, there are two special flags that can be assigned to a user: -- **Staff** - A user with the *staff* flag is able to access the admin interface, and can trigger dangerous actions that might have a security impact such as changing parsable files on the server (templates / reports / plugins). Some of these actions require the *admin* role to be assigned as well. +- **Staff** - A user with the *staff* flag is able to access the [Database Admin interface](./db_admin.md), and can trigger dangerous actions that might have a security impact such as changing parsable files on the server (templates / reports / plugins). Some of these actions require the *admin* role to be assigned as well. - **Superuser** - A user with the *superuser* flag is able to access and change all data and functions of InvenTree. A superuser can modify and access all data that the InvenTree installation / server has access to - including shell access on the server OS itself. This is a very powerful flag, and should be used with caution. It is strongly recommended to register any users with staff / superuser flags with strong MFA methods to reduce the risk of unauthorized access. These accounts should be used with caution, and should not be used for day-to-day operations. @@ -62,11 +62,11 @@ It is strongly recommended to register any users with staff / superuser flags wi Practicing account tiering is strongly recommended. -## Admin Interface Permissions +## Database Admin Permissions -If a user does not have the required permissions to perform a certain action in the admin interface, those options not be displayed. +If a user does not have the required permissions to perform a certain action in the [Database Admin interface](./db_admin.md), those options will not be displayed. -If a user is expecting a certain option to be available in the admin interface, but it is not present, it is most likely the case that the user does not have those permissions assigned. +If a user is expecting a certain option to be available in the Database Admin interface, but it is not present, it is most likely the case that the user does not have those permissions assigned. ## Web Interface Permissions diff --git a/docs/docs/settings/tasks.md b/docs/docs/settings/tasks.md index fd6d30c159..3d8721f9ee 100644 --- a/docs/docs/settings/tasks.md +++ b/docs/docs/settings/tasks.md @@ -24,6 +24,6 @@ The Django Q work must run separately to the web server. This is started as a se If the worker is not running, a warning indicator is displayed in the InvenTree menu bar. -## Admin Interface +## Admin Center -Scheduled tasks can be viewed in the InvenTree admin interface. +Scheduled, pending and failed tasks can be viewed in the [Admin Center](./admin.md#admin-center), under the *Background Tasks* section. diff --git a/docs/docs/settings/user.md b/docs/docs/settings/user.md index bc6919c780..b95abcb10a 100644 --- a/docs/docs/settings/user.md +++ b/docs/docs/settings/user.md @@ -25,6 +25,7 @@ The *Display Settings* screen shows general display configuration options: {{ usersetting("BARCODE_IN_FORM_FIELDS") }} {{ usersetting("DATE_DISPLAY_FORMAT") }} {{ usersetting("FORMS_CLOSE_USING_ESCAPE") }} +{{ usersetting("ENABLE_PREVIEW_PANEL") }} {{ usersetting("DISPLAY_STOCKTAKE_TAB") }} {{ usersetting("SHOW_FULL_CATEGORY_IN_TABLES")}} {{ usersetting("SHOW_BOM_SUBASSEMBLY_LEVELS")}} diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index 55714be4e0..d417760f47 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -65,7 +65,7 @@ The following basic options are available: {{ 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_ADMIN_URL") }} URL for accessing the [Database Admin interface](../settings/db_admin.md) | {{ configsetting("INVENTREE_LANGUAGE") }} Default language | {{ configsetting("INVENTREE_AUTO_UPDATE") }} Database migrations will be run automatically | diff --git a/docs/docs/stock/disassemble.md b/docs/docs/stock/disassemble.md new file mode 100644 index 0000000000..dd03877c35 --- /dev/null +++ b/docs/docs/stock/disassemble.md @@ -0,0 +1,90 @@ +--- +title: Stock Disassembly +--- + +## Stock Disassembly + +A stock item of an [assembly](../part/index.md#assembly) part can be *disassembled* back into its component parts, based on the [Bill of Materials](../manufacturing/bom.md) (BOM) for that part. This is the reverse of building an assembly - instead of consuming components to create an assembled item, the assembled item is broken back down into its constituent components. + +This is useful in a number of scenarios, for example: + +- An assembly is being reworked or scrapped, and the still-usable components need to be returned to stock +- A supplier ships a "bundled" or "kit" product as a single line item, which needs to be split apart into its individual components before the parts can be used or sold separately (see below) +- Correcting an assembly which was built or received in error + +Disassembly is only available for a stock item whose part is marked as an *assembly*, and requires that the part has at least one [BOM line item](../manufacturing/bom.md#bom-line-items) defined. + +To disassemble a stock item, navigate to the stock item detail page and select the *Disassemble* option from the actions menu. This requires that the user has the *Stock: Add* permission, and that the stock item is currently [in stock](./status.md). + +{{ image("stock/stock_options.png", "Stock Options") }} + +### Disassembly Form + +The disassembly form is pre-populated with one line per BOM line item defined for the part, based on the quantity of assemblies being disassembled. Any line item marked as [consumable](../manufacturing/bom.md#consumable-bom-line-items) (whether the BOM line itself or its underlying part is marked consumable), or which points to a [virtual](../part/index.md) part, is excluded, as these components are not expected to be tracked as physical stock. This exclusion is enforced by the API - such a BOM line cannot be submitted for disassembly, even if referenced directly. + +For each line, the following values may be adjusted: + +| Field | Description | +| --- | --- | +| Quantity | The total quantity of the component part to generate. This is automatically scaled as the top-level *Quantity* field is changed, unless the user has manually edited it | +| Location | An optional destination location for the generated stock item. If not specified, the component is placed in the same location as the disassembled item (or the default location specified at the top of the form) | +| Status | An optional [stock status](./status.md) to apply to the generated stock item. If not specified, the component is created with the default *OK* status | +| Unit Price | An optional purchase price to record against the generated stock item. If left blank, a price is calculated automatically (see below) | + +A line item can be removed from the form entirely if that particular component is not required to be split out - for example, if it is being scrapped rather than returned to stock. A line cannot be removed if it has installed items associated with it (see below). + +### Quantity + +Only the *available* quantity of a stock item can be disassembled. A [serialized](./traceability.md#serial-numbers) stock item does not have an adjustable quantity - since it represents a single physical unit, it must always be disassembled in its entirety. + +The original stock item is never deleted as a result of disassembly - its quantity is reduced by the disassembled amount, in order to preserve traceability. If a stock item is disassembled down to a zero quantity, it is retained in the database (in an *unavailable* state) rather than removed, even if the item has the [Delete on Deplete](./availability.md#delete-on-deplete) flag set. A serialized item cannot be reduced to a zero quantity, so in this case the original item is instead marked with a *Destroyed* status. + +### Accounting for Installed Items + +If the stock item being disassembled has other stock items [installed](../manufacturing/allocate.md#allocating-tracked-stock) within it (for example, tracked components that were installed during a build order), these installed items **must** be accounted for during disassembly: + +- Each installed item is matched against a BOM line item, based on the component part (including any [substitute](../manufacturing/bom.md#substitute-bom-line-items) or [variant](../part/index.md#assembly) parts allowed for that line) +- Matched installed items are *uninstalled* directly, rather than being discarded and re-created - this preserves the original stock item, including its own tracking history, batch code, and purchase price +- The quantity requested for the matching BOM line is reduced by the quantity already covered by the installed item(s). A new stock item is only created for any remaining quantity - if the installed items fully cover the required quantity, no new stock item is created for that line +- Any installed item which does *not* match one of the selected BOM lines is still uninstalled (it cannot be left "installed" inside a smaller or non-existent parent), but its quantity is **not** subtracted from any line + +Because installed items cannot be partially accounted for, **a stock item with any installed items must be disassembled in its entirety** - a partial disassembly (disassembling less than the full available quantity) is rejected if any items are currently installed. + +The disassembly form displays a count of installed items against each matching BOM line, and lists any "leftover" installed items (which do not match a BOM line) in a separate warning panel. + +### Automatic Cost Allocation + +If the original stock item has a recorded purchase price, and no explicit *Unit Price* has been entered for the generated lines, InvenTree attempts to automatically apportion that cost across the newly generated components: + +- The total cost (unit purchase price × disassembled quantity) is split across the lines, weighted by the existing [pricing](../part/pricing.md) data (average of minimum and maximum overall price) for each component part +- If pricing data is not available for *every* line, the cost is instead split evenly on a per-unit basis across all generated units +- Cost is only allocated across newly *created* stock items - any matched installed items retain their own existing purchase price, and are excluded from the cost split entirely +- If any line has an explicit *Unit Price* provided by the user, automatic cost allocation is skipped entirely, and prices are only applied where explicitly set + +### Traceability + +Disassembling a stock item generates a full audit trail: + +- A `Disassembled into components` entry is added to the tracking history of the original stock item +- Each newly created component stock item receives a `Created from disassembly` tracking entry, referencing the original stock item +- The *batch code* and source *purchase order* of the original stock item are copied directly to each generated component +- If the original stock item was generated by a build order, that build order cannot be directly copied to the new component (since the component was not actually built by that order) - instead, it is recorded as a reference within the `Created from disassembly` tracking entry + +### Purchasing Bundled Items + +Some suppliers only sell a group of components as a single bundled or "kit" product, rather than as individual purchasable line items. Such a bundle can be modelled as an assembly part, purchased and received as a single stock item, and later disassembled into its individual components - with purchase price and traceability data automatically apportioned across the generated components, as described above. + +Refer to the [Bundled Items](../purchasing/purchase_order.md#bundled-items) documentation for a full description of how to set this up. + +### Enforced Limitations + +The following limitations are enforced when disassembling a stock item: + +- The part associated with the stock item must be marked as an *assembly* +- The stock item must currently be [in stock](./status.md) - for example, it cannot be allocated to a sales order, installed in another assembly, or already fully consumed +- At least one BOM line item must be selected for disassembly +- The disassembly quantity cannot exceed the available quantity of the stock item +- A serialized stock item must be disassembled in its entirety (its quantity cannot be partially reduced) +- Each BOM line may only be referenced once per disassembly operation +- A selected BOM line must be a valid line item for the part associated with the stock item +- If the stock item has any installed items, it must be disassembled in its entirety diff --git a/docs/docs/stock/tracking.md b/docs/docs/stock/tracking.md index 309c682ba7..6ece3f08aa 100644 --- a/docs/docs/stock/tracking.md +++ b/docs/docs/stock/tracking.md @@ -40,6 +40,31 @@ This view displays all tracking entries associated with any stock item linked to !!! info "Deleted Stock Items" Even if a stock item is deleted from the system, the associated stock tracking entries are retained for historical reference. They will be visible in the part tracking history, but not in the stock item tracking history (as the stock item itself has been deleted). +## Installed Stock Items + +A stock item can be *installed* inside another stock item, forming a parent/child relationship between the two. This is used to represent physical assembly - for example, a serialized PCB assembly which has been fitted with a tracked sub-component, such as a wireless module or a pre-programmed IC. + +An installed stock item is no longer available for regular stock actions (it cannot be moved, allocated to an order, or built into another assembly) while it remains installed - it is only accessible "through" its parent item. + +### How Items Become Installed + +There are two ways that a stock item can become installed inside another: + +- **Tracked build allocation** - when a [tracked BOM item](../manufacturing/allocate.md#allocating-tracked-stock) is allocated to a build order and the build output is completed, the allocated stock item is automatically installed into the completed build output +- **Manual installation** - from the *Stock Item Detail* page, a user can manually install one stock item into another, using the *Install Item* action. By default, the selected item's part must appear in the [Bill of Materials](../manufacturing/bom.md) of the parent item's part - this check can be disabled using the {{ globalsetting("STOCK_ENFORCE_BOM_INSTALLATION", short=True) }} setting + +### Viewing Installed Items + +Any stock items installed within a particular stock item are displayed on the *Installed Items* tab of the *Stock Item Detail* page. + +By default, installed stock items are hidden from general stock item tables (as they are not directly available for use) - this can be changed using the {{ globalsetting("STOCK_SHOW_INSTALLED_ITEMS", short=True) }} setting. + +### Removing Installed Items + +An installed stock item can be removed (uninstalled) from its parent using the *Uninstall Item* action, which returns the item to a selected stock location and makes it available for regular stock actions once more. + +Additionally, installed items are automatically uninstalled when the parent item is [disassembled](./disassemble.md#accounting-for-installed-items) into its component parts - refer to that page for a detailed description of how installed items are matched against Bill of Materials line items during disassembly. + ## Stock Tracking Settings There are a number of configuration options available for controlling the behavior of stock tracking functionality in the [system settings view](../settings/global.md): diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 420fc8f35a..55fe2aed7b 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -91,7 +91,12 @@ nav: - Privacy: privacy.md - Concepts: - Terminology: concepts/terminology.md - - User Interface: concepts/user_interface.md + - User Interface: + - Overview: concepts/ui/index.md + - Tables: concepts/ui/tables.md + - Preview Panels: concepts/ui/preview_panels.md + - Forms: concepts/ui/forms.md + - Global Search: concepts/ui/global_search.md - Threat Model: concepts/threat_model.md - Physical Units: concepts/units.md - Companies: concepts/company.md @@ -147,6 +152,7 @@ nav: - Stock Tracking: stock/tracking.md - Stock Status: stock/status.md - Adjusting Stock: stock/adjust.md + - Stock Disassembly: stock/disassemble.md - Stock Expiry: stock/expiry.md - Stock Ownership: stock/owner.md - Test Results: stock/test.md @@ -186,7 +192,8 @@ nav: - Global Settings: settings/global.md - User Settings: settings/user.md - Reference Patterns: settings/reference.md - - Admin Interface: settings/admin.md + - Admin Center: settings/admin.md + - Database Admin Interface: settings/db_admin.md - Setup: - User Permissions: settings/permissions.md - Single Sign on: settings/SSO.md diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index c8572b46b2..83a8f95852 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,16 +1,35 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 517 +INVENTREE_API_VERSION = 523 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ -v517 -> 2026-07-06 : https://github.com/inventree/InvenTree/pull/11971 +v523 -> 2026-07-06 : https://github.com/inventree/InvenTree/pull/11971 - Removes direct "notes" field from any models which previously supported markdown notes - Adds a generic "Note" model which can be attached to any model type via a generic foreign key relationship - Allow multiple notes to be attached to a single object, and for notes to be created / edited / deleted via the API +v522 -> 2026-07-14 : https://github.com/inventree/InvenTree/pull/12388 + - Adds "unique" field to the ParameterTemplate model + +v521 -> 2026-07-12 : https://github.com/inventree/InvenTree/pull/12360 + - Removes the MPTT mixin from the StockItem model, and removes the self-referential tree structure from the database. + +v520 -> 2026-07-11 : https://github.com/inventree/InvenTree/pull/12310 + - Adds new "disassemble" API endpoint for stock items + - Allows a stock item to be broken down into component parts, based on its Bill of Materials + +v519 -> 2026-07-09 : https://github.com/inventree/InvenTree/pull/TODO + - Adds optional "roles" and "permissions" fields to the /user/me/ API endpoint, via the "?roles=true" query parameter + +v518 -> 2026-07-09 : https://github.com/inventree/InvenTree/pull/12341 + - Enable import of internal part prices via the API + +v517 -> 2026-07-08 : https://github.com/inventree/InvenTree/pull/12336 + - Fix currency code options for the PartPricing model and API endpoints + v516 -> 2026-07-03 : https://github.com/inventree/InvenTree/pull/12295 - Adds "consumable" field to the Part model and API endpoints diff --git a/src/backend/InvenTree/InvenTree/fields.py b/src/backend/InvenTree/InvenTree/fields.py index 1254b1b57d..8f6d55bde5 100644 --- a/src/backend/InvenTree/InvenTree/fields.py +++ b/src/backend/InvenTree/InvenTree/fields.py @@ -14,6 +14,7 @@ from djmoney.models.fields import MoneyField as ModelMoneyField from djmoney.models.validators import MinMoneyValidator from rest_framework.fields import URLField as RestURLField from rest_framework.fields import empty +from rest_framework.relations import PrimaryKeyRelatedField import InvenTree.helpers import InvenTree.ready @@ -48,6 +49,42 @@ class InvenTreeRestURLField(RestURLField): return super().run_validation(data=data) +class PrefetchedPrimaryKeyRelatedField(PrimaryKeyRelatedField): + """A PrimaryKeyRelatedField which resolves against a pre-fetched {pk: instance} map. + + PrimaryKeyRelatedField normally issues one .get() query per list entry when used + inside a many=True nested serializer - for large lists (hundreds of related objects) + that becomes an O(n) query cost just to validate the request. The parent serializer + should instead bulk-fetch all referenced objects in a single query and stash the + {pk: instance} map in self.context[cache_key] (typically from an overridden + to_internal_value()); this field then does an O(1) dict lookup instead of hitting + the database. + + Falls back to the default per-item query if no cache has been populated (or the pk + is missing from it), so this field remains safe to use standalone - e.g. in tests + constructing the child serializer directly, or for a pk that's genuinely invalid. + """ + + def __init__(self, cache_key: str, **kwargs): + """Store the context key under which the parent serializer stashes its prefetch cache.""" + self.cache_key = cache_key + super().__init__(**kwargs) + + def to_internal_value(self, data): + """Resolve 'data' (a raw pk value) against the prefetch cache, if available.""" + cache = self.context.get(self.cache_key) + + try: + pk = int(data) + except (TypeError, ValueError): + pk = None + + if not cache or pk not in cache: + return super().to_internal_value(data) + + return cache[pk] + + class InvenTreeURLField(models.URLField): """Custom URL field which has custom scheme validators.""" @@ -100,7 +137,9 @@ def money_kwargs(**kwargs): kwargs['decimal_places'] = 6 if 'currency_choices' not in kwargs: - kwargs['currency_choices'] = currency_code_mappings() + # Pass the function itself (not the evaluated result) so that the + # available currency options are resolved dynamically. + kwargs['currency_choices'] = currency_code_mappings if InvenTree.ready.isRunningMigrations(): # During migrations, avoid setting a default currency diff --git a/src/backend/InvenTree/InvenTree/helpers_db.py b/src/backend/InvenTree/InvenTree/helpers_db.py new file mode 100644 index 0000000000..1dfaeea581 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/helpers_db.py @@ -0,0 +1,66 @@ +"""Database helper functions for InvenTree.""" + +import uuid +from typing import Optional + +from django.db import transaction +from django.db.models import QuerySet + + +@transaction.atomic +def bulk_create_and_fetch( + model, items, id_field: str = 'pk', filters: Optional[dict] = None +) -> QuerySet: + """Bulk create items in the database, and return a queryset of the created items. + + Arguments: + model: The Django model class to create instances of. + items: A list of dictionaries containing the data for each item to be created. + id_field: The name of the field to use as the unique identifier for the created items. + filters: Optional dictionary of filters to apply when fetching the created items. + + Returns: + A Django QuerySet containing the created items. + + This helper method is required because the Django bulk_create() method + does not guarantee that the ID values of the created items will be populated in the returned objects. + In particular, MySQL does not support returning the ID values of bulk created items. + + So, we provide temporary metadata to the created items, + which can be used to fetch the created items from the database. + + Assumptions: + - The provided model type has a "metadata" attribute which can be overloaded for this purpose + - No "metadata" is provided in the input items, as this will be overwritten by the method + - The model type has an incrementing ID field (default: "pk") + + """ + bulk_create_id = uuid.uuid4().hex + + # Generate temporary metadata for bulk fetching + metadata = {'bulk_create_id': bulk_create_id} + + lookup_filters = dict(filters) if filters else {} + + lookup_filters['metadata__bulk_create_id'] = bulk_create_id + + if id_field: + # Find the "most recent" item in the database, to set a search floor + if instance := model.objects.order_by(f'-{id_field}').first(): + lookup_filters[f'{id_field}__gt'] = getattr(instance, id_field) + + # Overwrite the metadata values + for item in items: + item.metadata = metadata + + model.objects.bulk_create(items, batch_size=500) + + instances = model.objects.filter(**lookup_filters) + + pks = list(instances.values_list(id_field or 'pk', flat=True)) + + # Override the metadata values to remove the temporary bulk_create_id + instances.update(metadata=None) + + # Fetch the newly created items (by primary key, as the metadata filter no longer matches) + return model.objects.filter(**{f'{id_field or "pk"}__in': pks}) diff --git a/src/backend/InvenTree/InvenTree/management/commands/rebuild_models.py b/src/backend/InvenTree/InvenTree/management/commands/rebuild_models.py index c1d35f879b..33a21b5d65 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/rebuild_models.py +++ b/src/backend/InvenTree/InvenTree/management/commands/rebuild_models.py @@ -43,16 +43,6 @@ class Command(BaseCommand): except Exception: logger.info('Error rebuilding PartCategory objects') - # StockItem model - try: - logger.info('Rebuilding StockItem objects') - - from stock.models import StockItem - - StockItem.objects.rebuild() - except Exception: - logger.info('Error rebuilding StockItem objects') - # StockLocation model try: logger.info('Rebuilding StockLocation objects') diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index be29bb59d2..a72a7964dc 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -596,12 +596,21 @@ class InvenTreeParameterMixin(InvenTreePermissionCheckMixin, models.Model): content_type = ContentType.objects.get_for_model(self.__class__) - template_ids = [parameter.template.pk for parameter in other.parameters.all()] + # Skip any parameters which are linked to a template with a uniqueness requirement, + # as copying these values would create conflicting (duplicate) values + copyable_parameters = [ + parameter + for parameter in other.parameters.all().select_related('template') + if parameter.template.unique + == common.models.ParameterTemplate.UniqueOptions.NONE + ] + + template_ids = [parameter.template.pk for parameter in copyable_parameters] # Remove all conflicting parameters first self.parameters_list.filter(template__pk__in=template_ids).delete() - for parameter in other.parameters.all(): + for parameter in copyable_parameters: parameter.pk = None parameter.model_id = self.pk parameter.model_type = content_type @@ -1543,11 +1552,15 @@ def after_failed_task(sender, instance: Task, created: bool, **kwargs): # Create a new Error object associated with this failed task # This will, in turn, trigger a notification to staff users via the Error post_save signal + message = f"Task '{instance.func} ({instance.pk})' failed after {n} attempts" + + logger.error(message) + log_error( 'task_failure', scope='worker', error_name='Task Failure', - error_info=f"Task '{instance.pk}' failed after {n} attempts", + error_info=message, error_data=str(instance.result) if instance.result else '', ) diff --git a/src/backend/InvenTree/InvenTree/schema.py b/src/backend/InvenTree/InvenTree/schema.py index ebd3bda9d8..bebc5ed487 100644 --- a/src/backend/InvenTree/InvenTree/schema.py +++ b/src/backend/InvenTree/InvenTree/schema.py @@ -223,12 +223,18 @@ def postprocess_schema_enums(result, generator, **kwargs): """Custom patch to ignore some drf-spectacular warnings. - Some warnings are unavoidable due to the way that InvenTree implements generic relationships (via ContentType). + - Some warnings are unavoidable due to the way that InvenTree implements custom (database-editable) status codes: + multiple serializers legitimately expose a 'status' field backed by the same dynamic StockStatus choice set + (e.g. stock adjustment, receiving a purchase order line, disassembling a stock item), and drf-spectacular + cannot settle on a single stable name for the shared, runtime-dependent choice set. - The cleanest way to handle this appears to be to override the 'warn' function from drf-spectacular. Ref: https://github.com/inventree/InvenTree/pull/10699 """ ignore_patterns = [ - 'enum naming encountered a non-optimally resolvable collision for fields named "model_type"' + 'enum naming encountered a non-optimally resolvable collision for fields named "model_type"', + 'enum naming encountered a non-optimally resolvable collision for fields named "status"', + 'encountered multiple names for the same choice set (StatusCustomKeyEnum)', ] if any(pattern in msg for pattern in ignore_patterns): diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index e44520629b..0b868920b8 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -1,10 +1,13 @@ """Functions for tasks and a few general async tasks.""" +import contextvars import json import os import re import warnings +from collections import defaultdict from collections.abc import Callable +from contextlib import contextmanager from dataclasses import dataclass from datetime import datetime, timedelta from typing import Optional @@ -13,7 +16,7 @@ from django.conf import settings from django.contrib.auth import get_user_model from django.core.exceptions import AppRegistryNotReady, ValidationError from django.core.management import call_command -from django.db import DEFAULT_DB_ALIAS, connections +from django.db import DEFAULT_DB_ALIAS, connections, transaction from django.db.migrations.executor import MigrationExecutor from django.db.utils import NotSupportedError, OperationalError, ProgrammingError from django.utils import timezone @@ -201,6 +204,86 @@ def check_existing_task(taskname, group: str, *args, **kwargs) -> Optional[str]: return task_id +# Context-local batch of pending offload_task() calls (see batch_offload_tasks()) +_task_batch: contextvars.ContextVar = contextvars.ContextVar('task_batch', default=None) + + +class TaskBatch: + """Collects offload_task() calls made within a batch_offload_tasks() scope. + + Entries are grouped by (taskname, group, force_async), so that each distinct + combination triggered within the batch is flushed via its own bulk_offload_task() call. + """ + + def __init__(self): + """Initialize an empty batch.""" + self.entries: dict[tuple, list] = defaultdict(list) + + def add( + self, taskname, group: str, force_async: bool, args: tuple, kwargs: dict + ) -> None: + """Record a single offload_task() call against this batch.""" + self.entries[taskname, group, force_async].append((args, kwargs)) + + def flush(self) -> None: + """Fire a bulk_offload_task() call for each (taskname, group, force_async) group collected so far.""" + entries, self.entries = self.entries, defaultdict(list) + + for (taskname, group, force_async), task_entries in entries.items(): + bulk_offload_task( + taskname, task_entries, group=group, force_async=force_async + ) + + +@contextmanager +def batch_offload_tasks(): + """Batch offload_task() calls made within this scope into bulk_offload_task() calls. + + Any offload_task() call made (directly, or indirectly via a nested function call) while + this context is active is queued instead of immediately offloaded - *except* for calls + which pass force_sync=True, which always run immediately and synchronously as before. + Excluding these is necessary because a forced-sync call is relied upon to have completed, + with its side effects visible, by the time offload_task() returns control to the caller - + deferring it would silently break that contract. + + The queued calls are flushed - grouped by (taskname, group, force_async), one + bulk_offload_task() call per group - when the current database transaction commits (or + immediately, if no transaction is active). If the transaction is instead rolled back, the + queued calls are discarded, rather than being fired for a write that never happened. + + Note: bulk_offload_task() does not perform duplicate-task checking, unlike offload_task()'s + default (check_duplicates=True) behavior - queued calls are never deduplicated, regardless + of the check_duplicates value passed to offload_task(). + + A batched offload_task() call always returns True immediately, rather than a task ID - + the actual task ID is not known until the batch is flushed, possibly well after the + call returns. Callers which depend on the returned task ID should not use this context. + + Nesting is not supported: a nested batch_offload_tasks() call reuses the outer batch, + and only the outermost call schedules a flush. + + This mirrors plugin.base.event.events.batch_events() and stock.models.batch_tracking_entries() + - see batch_events()'s docstring for the reasoning behind the on-commit flush and the + context-local (rather than parameter-based) design. + + Yields: + The current TaskBatch instance + """ + if _task_batch.get() is not None: + # Already inside a batch - extend it, rather than creating a nested one + yield _task_batch.get() + return + + batch = TaskBatch() + token = _task_batch.set(batch) + + try: + yield batch + finally: + _task_batch.reset(token) + transaction.on_commit(batch.flush) + + def offload_task( taskname, *args, @@ -224,11 +307,18 @@ def offload_task( Returns: str | bool: Task ID if the task was offloaded, True if ran synchronously, False otherwise """ - from InvenTree.exceptions import log_error - # Extract group information from kwargs group = kwargs.pop('group', 'inventree') + if not force_sync and (batch := _task_batch.get()) is not None: + # A batch_offload_tasks() context is active - queue this task rather than + # offloading it immediately (force_sync=True calls never reach this branch - + # see batch_offload_tasks() for why they are excluded from batching) + batch.add(taskname, group, force_async, args, kwargs) + return True + + from InvenTree.exceptions import log_error + try: import importlib @@ -323,6 +413,96 @@ def offload_task( return True +def bulk_offload_task( + taskname, + entries: list, + group: str = 'inventree', + force_sync: bool = False, + force_async: bool = False, +) -> bool: + """Queue the same background task many times, in a single bulk database write. + + Equivalent to calling offload_task() once per (args, kwargs) pair in 'entries', but + writes all of the queued tasks to the django-q2 ORM broker table (OrmQ) in a single + bulk_create() call, rather than one INSERT per task. + + Note: InvenTree always configures django-q2 to use the ORM broker (see + InvenTree.setting.worker.get_worker_config), so this does not need to handle any + other broker backend. + + Arguments: + taskname: The name of the task to be run, in the format 'app.module.function' + entries: List of (args, kwargs) tuples, one per task instance to queue + group: The task group to assign to each queued task + force_sync: If True, run all tasks synchronously (even if workers are running) + force_async: If True, force all tasks to be queued (even if workers are not running) + + Returns: + bool: True if the tasks were queued (or run synchronously), False otherwise + """ + if not entries: + return False + + try: + from django_q.brokers import get_broker + from django_q.humanhash import uuid + from django_q.models import OrmQ + from django_q.signing import SignedPackage + + from InvenTree.status import is_worker_running + except AppRegistryNotReady: # pragma: no cover + logger.warning( + "Could not offload bulk task '%s' - app registry not ready", taskname + ) + force_sync = True + except (OperationalError, ProgrammingError): # pragma: no cover + raise_warning(f"Could not offload bulk task '{taskname}' - database not ready") + force_sync = True + + if not force_async and (force_sync or not is_worker_running()): + # Workers are not available - fall back to running each task synchronously + for args, kwargs in entries: + offload_task( + taskname, + *args, + group=group, + force_sync=True, + check_duplicates=False, + **kwargs, + ) + + return True + + broker = get_broker() + + tasks = [] + + for args, kwargs in entries: + name, task_id = uuid() + + task = { + 'id': task_id, + 'name': name, + 'func': taskname, + 'args': args, + 'kwargs': kwargs, + 'group': group, + 'started': timezone.now(), + } + + tasks.append( + OrmQ( + key=broker.list_key or 'inventree', + payload=SignedPackage.dumps(task), + lock=timezone.now(), + ) + ) + + OrmQ.objects.bulk_create(tasks) + + return True + + def get_queued_task(task_id: str): """Find the task in the queue, if it exists. diff --git a/src/backend/InvenTree/InvenTree/test_commands.py b/src/backend/InvenTree/InvenTree/test_commands.py index 82caec7d73..7554f16db0 100644 --- a/src/backend/InvenTree/InvenTree/test_commands.py +++ b/src/backend/InvenTree/InvenTree/test_commands.py @@ -1,5 +1,7 @@ """Tests for custom InvenTree management commands.""" +import os +import subprocess from pathlib import Path from django.conf import settings @@ -15,6 +17,48 @@ from InvenTree.config import get_testfolder_dir class CommandTestCase(TestCase): """Test case for custom management commands.""" + def test_makemigrations_currency_overrides_no_changes(self): + """Ensure currency list changes do not cause migration drift.""" + currency_sets = ['USD,EUR,GBP', 'JPY,CNY,KRW'] + + for currency_codes in currency_sets: + with self.subTest(currency_codes=currency_codes): + old_value = os.environ.get('INVENTREE_CURRENCY_CODES') + + try: + os.environ['INVENTREE_CURRENCY_CODES'] = currency_codes + project_dir = Path(__file__).resolve().parents[1] + + result = subprocess.run( + [ + 'python3', + 'manage.py', + 'makemigrations', + '--check', + '--dry-run', + '--verbosity', + '0', + ], + cwd=project_dir, + env=os.environ.copy(), + capture_output=True, + text=True, + check=False, + ) + + if result.returncode != 0: + self.fail( + 'makemigrations reported schema changes ' + f'for INVENTREE_CURRENCY_CODES={currency_codes}\n' + f'stdout:\n{result.stdout}\n' + f'stderr:\n{result.stderr}' + ) + finally: + if old_value is None: + os.environ.pop('INVENTREE_CURRENCY_CODES', None) + else: + os.environ['INVENTREE_CURRENCY_CODES'] = old_value + def test_schema(self): """Test the schema generation command.""" output = call_command('schema', file='schema.yml', verbosity=0) diff --git a/src/backend/InvenTree/InvenTree/test_helpers_db.py b/src/backend/InvenTree/InvenTree/test_helpers_db.py new file mode 100644 index 0000000000..6a899f0bc2 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/test_helpers_db.py @@ -0,0 +1,163 @@ +"""Functional tests for the InvenTree.helpers_db module.""" + +from django.db import connection +from django.test import TestCase +from django.test.utils import CaptureQueriesContext + +from company.models import Company, Contact +from InvenTree.helpers_db import bulk_create_and_fetch +from order.models import PurchaseOrder +from part.models import Part +from stock.models import StockItem + + +class BulkCreateAndFetchTest(TestCase): + """Tests for the bulk_create_and_fetch helper function.""" + + def test_basic(self): + """Created items are returned with populated, unique primary keys.""" + company = Company.objects.create(name='ACME') + + items = [Contact(company=company, name=f'Contact {idx}') for idx in range(10)] + + result = bulk_create_and_fetch(Contact, items) + + self.assertEqual(result.count(), 10) + + pks = [c.pk for c in result] + + # Every item has a valid, unique primary key + self.assertTrue(all(pk is not None for pk in pks)) + self.assertEqual(len(pks), len(set(pks))) + + # Returned items exactly match what is actually in the database + db_pks = set( + Contact.objects.filter(company=company).values_list('pk', flat=True) + ) + self.assertEqual(set(pks), db_pks) + + # Temporary bulk-create metadata should have been cleared again + for contact in Contact.objects.filter(pk__in=pks): + self.assertIsNone(contact.metadata) + + def test_with_filters(self): + """Additional filters correctly scope the returned queryset.""" + company_a = Company.objects.create(name='Company A') + company_b = Company.objects.create(name='Company B') + + items_a = [Contact(company=company_a, name=f'A{i}') for i in range(3)] + items_b = [Contact(company=company_b, name=f'B{i}') for i in range(4)] + + result_a = bulk_create_and_fetch( + Contact, items_a, filters={'company': company_a} + ) + result_b = bulk_create_and_fetch( + Contact, items_b, filters={'company': company_b} + ) + + self.assertEqual(result_a.count(), 3) + self.assertEqual(result_b.count(), 4) + + self.assertTrue(all(c.company_id == company_a.pk for c in result_a)) + self.assertTrue(all(c.company_id == company_b.pk for c in result_b)) + + def test_ignores_pre_existing_rows(self): + """The 'search floor' should exclude pre-existing rows in the table.""" + company = Company.objects.create(name='ACME') + + # Pre-existing item, *not* created via the helper + Contact.objects.create(company=company, name='Existing') + + items = [Contact(company=company, name=f'New {i}') for i in range(2)] + result = bulk_create_and_fetch(Contact, items) + + self.assertEqual(result.count(), 2) + self.assertNotIn('Existing', [c.name for c in result]) + + def test_empty_list(self): + """Calling with an empty list of items should not raise, and return no items.""" + result = bulk_create_and_fetch(Contact, []) + self.assertEqual(result.count(), 0) + + def test_does_not_mutate_caller_filters(self): + """The caller-provided 'filters' dict should not be mutated as a side effect.""" + company = Company.objects.create(name='ACME') + filters = {'company': company} + + items = [Contact(company=company, name='Contact')] + bulk_create_and_fetch(Contact, items, filters=filters) + + def test_purchase_order(self): + """The helper works for the PurchaseOrder model.""" + supplier = Company.objects.create(name='Supplier Co', is_supplier=True) + + references = [f'PO-{idx:04d}' for idx in range(10)] + + items = [ + PurchaseOrder(supplier=supplier, reference=ref, description=f'Order {ref}') + for ref in references + ] + + result = bulk_create_and_fetch(PurchaseOrder, items) + + self.assertEqual(result.count(), 10) + + pks = [o.pk for o in result] + self.assertTrue(all(pk is not None for pk in pks)) + self.assertEqual(len(pks), len(set(pks))) + + self.assertEqual( + set(result.values_list('reference', flat=True)), set(references) + ) + + for order in PurchaseOrder.objects.filter(pk__in=pks): + self.assertIsNone(order.metadata) + + def test_stock_item(self): + """The helper works for the StockItem model.""" + part = Part.objects.create(name='Widget', description='A widget') + + items = [StockItem(part=part, quantity=idx + 1) for idx in range(10)] + + result = bulk_create_and_fetch(StockItem, items) + + self.assertEqual(result.count(), 10) + + pks = [si.pk for si in result] + self.assertTrue(all(pk is not None for pk in pks)) + self.assertEqual(len(pks), len(set(pks))) + + self.assertEqual( + sorted(result.values_list('quantity', flat=True)), + sorted(idx + 1 for idx in range(10)), + ) + + for stock_item in StockItem.objects.filter(pk__in=pks): + self.assertIsNone(stock_item.metadata) + + def _create_and_count_queries(self, n: int) -> int: + """Bulk-create 'n' Contact items, and return the number of queries used.""" + company = Company.objects.create(name=f'Company {n}') + + items = [Contact(company=company, name=f'Contact {i}') for i in range(n)] + + with CaptureQueriesContext(connection) as ctx: + result = bulk_create_and_fetch(Contact, items) + + self.assertEqual(result.count(), n) + + MAX_QUERIES = 25 if n > 100 else 10 + + self.assertLess(len(ctx.captured_queries), MAX_QUERIES) + + return len(ctx.captured_queries) + + def test_query_count_is_constant(self): + """The number of queries used should not depend on the number of created items.""" + small_query_count = self._create_and_count_queries(5) + large_query_count = self._create_and_count_queries(100) + + self.assertEqual(small_query_count, large_query_count) + + # Perform a very large bulk-create - this will be batched + self._create_and_count_queries(2000) diff --git a/src/backend/InvenTree/InvenTree/test_tasks.py b/src/backend/InvenTree/InvenTree/test_tasks.py index 0638c51d9b..c059e79254 100644 --- a/src/backend/InvenTree/InvenTree/test_tasks.py +++ b/src/backend/InvenTree/InvenTree/test_tasks.py @@ -6,6 +6,7 @@ from datetime import timedelta from django.conf import settings from django.contrib.auth.models import User from django.core.management import call_command +from django.db import transaction from django.db.utils import NotSupportedError from django.test import TestCase from django.utils import timezone @@ -411,3 +412,175 @@ class InvenTreeTaskTests(PluginRegistryMixin, TestCase): # 20 more tasks should have been added self.assertEqual(OrmQ.objects.count(), 41) + + def test_bulk_offload(self): + """Test the bulk_offload_task function.""" + # Start with a blank slate + OrmQ.objects.all().delete() + + entries = [ + ((idx, idx + 1), {'animal': f'animal_{idx}', 'count': idx}) + for idx in range(10) + ] + + # Queuing all 10 tasks should only take a single database write (bulk_create) + with self.assertNumQueries(1): + result = InvenTree.tasks.bulk_offload_task( + 'dummy_module.dummy_function', entries, force_async=True + ) + + self.assertTrue(result) + self.assertEqual(OrmQ.objects.count(), 10) + + # Read out the pending tasks, and check that the args / kwargs match + queued_tasks = OrmQ.objects.all().order_by('id') + + for task, (args, kwargs) in zip(queued_tasks, entries, strict=True): + self.assertEqual(task.func(), 'dummy_module.dummy_function') + self.assertEqual(task.group(), 'inventree') + self.assertEqual(task.args(), args) + self.assertEqual(task.kwargs(), kwargs) + + +class TaskBatchTests(TestCase): + """Unit tests for the batch_offload_tasks() context manager.""" + + def setUp(self): + """Start each test with an empty task queue.""" + super().setUp() + OrmQ.objects.all().delete() + + def test_tasks_queued_and_flushed_on_commit(self): + """Tasks offloaded inside batch_offload_tasks() are queued and flushed as one bulk write on commit.""" + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), InvenTree.tasks.batch_offload_tasks(): + for idx in range(10): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function', + idx, + force_async=True, + animal=f'animal_{idx}', + ) + + # Nothing should be queued yet - the batch only flushes on commit + self.assertEqual(OrmQ.objects.count(), 0) + + self.assertEqual(OrmQ.objects.count(), 10) + + queued_tasks = OrmQ.objects.all().order_by('id') + + for idx, task in enumerate(queued_tasks): + self.assertEqual(task.func(), 'dummy_module.dummy_function') + self.assertEqual(task.group(), 'inventree') + self.assertEqual(task.args(), (idx,)) + self.assertEqual(task.kwargs(), {'animal': f'animal_{idx}'}) + + def test_tasks_grouped_by_name_and_group(self): + """Tasks with different (taskname, group) combinations are flushed as separate bulk writes.""" + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), InvenTree.tasks.batch_offload_tasks(): + for idx in range(5): + InvenTree.tasks.offload_task( + 'dummy_module.task_a', idx, force_async=True, group='alpha' + ) + for idx in range(3): + InvenTree.tasks.offload_task( + 'dummy_module.task_b', idx, force_async=True, group='beta' + ) + + self.assertEqual(OrmQ.objects.count(), 8) + self.assertEqual( + sum( + 1 + for t in OrmQ.objects.all() + if t.func() == 'dummy_module.task_a' and t.group() == 'alpha' + ), + 5, + ) + self.assertEqual( + sum( + 1 + for t in OrmQ.objects.all() + if t.func() == 'dummy_module.task_b' and t.group() == 'beta' + ), + 3, + ) + + def test_tasks_discarded_on_rollback(self): + """Tasks queued in a batch are discarded, not fired, if the transaction rolls back.""" + with self.captureOnCommitCallbacks(execute=True): + try: + with transaction.atomic(), InvenTree.tasks.batch_offload_tasks(): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function', force_async=True + ) + raise ValueError('boom') + except ValueError: + pass + + self.assertEqual(OrmQ.objects.count(), 0) + + def test_tasks_outside_batch_fire_immediately(self): + """Tasks offloaded outside any batch_offload_tasks() context are unaffected - fired immediately.""" + InvenTree.tasks.offload_task('dummy_module.dummy_function', force_async=True) + + # No transaction commit or captureOnCommitCallbacks needed - it was never queued + self.assertEqual(OrmQ.objects.count(), 1) + + def test_nested_batch_share_one_flush(self): + """A nested batch_offload_tasks() call reuses the outer batch, rather than flushing twice.""" + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), InvenTree.tasks.batch_offload_tasks(): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function', 1, force_async=True + ) + with InvenTree.tasks.batch_offload_tasks(): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function', 2, force_async=True + ) + self.assertEqual(OrmQ.objects.count(), 0) + + self.assertEqual(OrmQ.objects.count(), 2) + + def test_force_sync_excluded_from_batch(self): + """force_sync=True calls bypass batch_offload_tasks() entirely and run immediately.""" + calls = [] + + def sync_target(): + calls.append('ran') + + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), InvenTree.tasks.batch_offload_tasks(): + InvenTree.tasks.offload_task(sync_target, force_sync=True) + + # Ran immediately - not deferred to flush, and never touched the task queue + self.assertEqual(calls, ['ran']) + self.assertEqual(OrmQ.objects.count(), 0) + + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function', force_async=True + ) + + # The (non-force_sync) async call is queued, not yet in OrmQ + self.assertEqual(OrmQ.objects.count(), 0) + + # After commit: only the batched async call produced an OrmQ entry + self.assertEqual(OrmQ.objects.count(), 1) + self.assertEqual(calls, ['ran']) + + def test_batched_calls_skip_duplicate_check(self): + """Unlike individual offload_task() calls, batched calls are never deduplicated.""" + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), InvenTree.tasks.batch_offload_tasks(): + for _ in range(3): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function_dup', + 1, + 2, + animal='cat', + force_async=True, + ) + + # All 3 identical calls were queued, unlike the non-batched dedup behavior + # exercised in InvenTreeTaskTests.test_duplicate_tasks + self.assertEqual(OrmQ.objects.count(), 3) diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index 7934f91324..f8ef27a75e 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -104,10 +104,9 @@ class TreeFixtureTest(TestCase): self.run_tree_test(Build) def test_stock(self): - """Test MPTT tree structure for Stock model.""" - from stock.models import StockItem, StockLocation + """Test MPTT tree structure for StockLocation model.""" + from stock.models import StockLocation - self.run_tree_test(StockItem) self.run_tree_test(StockLocation) @@ -1102,7 +1101,7 @@ class CurrencyTests(TestCase): update_successful = False # Note: the update sometimes fails in CI, let's give it a few chances - for _ in range(10): + for idx in range(10): InvenTree.tasks.update_exchange_rates() rates = Rate.objects.all() @@ -1114,7 +1113,7 @@ class CurrencyTests(TestCase): else: # pragma: no cover print('Exchange rate update failed - retrying') print(f'Expected {currency_codes()}, got {[a.currency for a in rates]}') - time.sleep(1) + time.sleep(1 + idx) self.assertTrue(update_successful) diff --git a/src/backend/InvenTree/InvenTree/unit_test.py b/src/backend/InvenTree/InvenTree/unit_test.py index bae1262297..572f8930cc 100644 --- a/src/backend/InvenTree/InvenTree/unit_test.py +++ b/src/backend/InvenTree/InvenTree/unit_test.py @@ -380,13 +380,23 @@ class TestQueryMixin: ): """Context manager to check that the number of queries is less than a certain value. + Arguments: + value: The maximum number of queries allowed + using: The database connection to use (default = 'default') + verbose: If True, print the queries to the console (default = False) + url: Optional URL to print in the output (default = None) + log_to_file: If True, log the queries to a file (default = False) + + Yields: + The CaptureQueriesContext object, which contains the captured queries + Example: with self.assertNumQueriesLessThan(10): # Do some stuff Ref: https://stackoverflow.com/questions/1254170/django-is-there-a-way-to-count-sql-queries-from-an-unit-test/59089020#59089020 """ with CaptureQueriesContext(connections[using]) as context: - yield # your test will be run here + yield context # your test will be run here n = len(context.captured_queries) @@ -492,12 +502,16 @@ class InvenTreeAPITestCase( expected_code = kwargs.pop('expected_code', None) msg = kwargs.pop('msg', None) - max_queries = kwargs.pop('max_query_count', self.MAX_QUERY_COUNT) + max_query_count = kwargs.pop('max_query_count', self.MAX_QUERY_COUNT) max_query_time = kwargs.pop('max_query_time', self.MAX_QUERY_TIME) + benchmark = kwargs.pop('benchmark', False) t1 = time.time() - with self.assertNumQueriesLessThan(max_queries, url=url): + with ( + self.assertNumQueriesLessThan(max_query_count, url=url) as context, + self.captureOnCommitCallbacks(execute=True), + ): response = method(url, data, **kwargs) t2 = time.time() @@ -512,6 +526,11 @@ class InvenTreeAPITestCase( self.assertLessEqual(dt, max_query_time) + if benchmark: + print( + f"Benchmark @ '{url}': {len(context.captured_queries)} queries (of {max_query_count}) in {dt:.4f}s (of {max_query_time}s max)" + ) + return response def get(self, url, data=None, expected_code=200, **kwargs): diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index 55bfefe838..724c3b02f0 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -133,27 +133,14 @@ def isInvenTreeDevelopmentVersion() -> bool: return inventreeVersion().endswith('dev') -def inventreeDocsVersion() -> str: - """Return the version string matching the latest documentation. - - Development -> "latest" - Release -> "major.minor.sub" e.g. "0.5.2" - """ - if isInvenTreeDevelopmentVersion(): - return 'latest' - - return INVENTREE_SW_VERSION - - def inventreeDocUrl() -> str: """Return URL for InvenTree documentation site.""" - tag = inventreeDocsVersion() - return f'https://docs.inventree.org/en/{tag}' + return 'https://docs.inventree.org' def inventreeAppUrl() -> str: """Return URL for InvenTree app site.""" - return 'https://docs.inventree.org/en/stable/app/' + return 'https://docs.inventree.org/en/latest/app/' def inventreeGithubUrl() -> str: diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index c8fe5d2857..5ebd34876a 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -1041,6 +1041,15 @@ class Build( if not output: raise ValidationError(_('No build output specified')) + # Re-check the state of the output itself: + # It may have changed since the scrap request was validated + # (e.g. a duplicated background task, or a concurrent request) + if not output.is_building: + raise ValidationError(_('Build output has already been completed')) + + if output.build != self: + raise ValidationError(_('Build output does not match Build Order')) + # If quantity is not specified, assume the entire output quantity if quantity is None: quantity = output.quantity @@ -1111,6 +1120,15 @@ class Build( Raises: ValidationError: If the build output cannot be completed, with an appropriate message """ + # Re-check the state of the output itself: + # It may have changed since the completion request was validated + # (e.g. a duplicated background task, or a concurrent request) + if not output.is_building: + raise ValidationError(_('Build output has already been completed')) + + if output.build != self: + raise ValidationError(_('Build output does not match Build Order')) + prevent_incomplete = get_global_setting( 'PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS' ) @@ -1219,9 +1237,11 @@ class Build( trigger_event(BuildEvents.OUTPUT_COMPLETED, id=output.pk, build_id=self.pk) # Increase the completed quantity for this build - self.completed += output.quantity - - self.save() + # Increment at the database level to prevent lost updates + # (multiple outputs may be completed concurrently) + self.completed = F('completed') + output.quantity + self.save(update_fields=['completed']) + self.refresh_from_db(fields=['completed']) @transaction.atomic def auto_allocate_stock( @@ -2027,6 +2047,12 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): if quantity > item.quantity: quantity = item.quantity + if quantity <= 0: + # There is nothing to consume or install: + # simply remove this (empty) allocation + self.delete() + return + # Split the allocated stock if there are more available than allocated if item.quantity > quantity: item = item.splitStock(quantity, None, user, notes=notes) @@ -2056,8 +2082,11 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): ) # Increase the "consumed" count for the associated BuildLine - self.build_line.consumed += quantity - self.build_line.save() + # Increment at the database level to prevent lost updates + # (multiple allocations against the same BuildLine may complete concurrently) + self.build_line.consumed = F('consumed') + quantity + self.build_line.save(update_fields=['consumed']) + self.build_line.refresh_from_db(fields=['consumed']) # Decrease the allocated quantity self.quantity = max(0, self.quantity - quantity) diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 78674c1aec..a044b3aea6 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -1008,7 +1008,11 @@ class BuildAllocationSerializer(serializers.Serializer): } try: - if build_item := BuildItem.objects.filter(**params).first(): + # Lock the row, so concurrent allocations cannot both read + # the same starting quantity (lost update) + if build_item := ( + BuildItem.objects.select_for_update().filter(**params).first() + ): # Find an existing BuildItem for this stock item # If it exists, increase the quantity build_item.quantity += quantity diff --git a/src/backend/InvenTree/build/tasks.py b/src/backend/InvenTree/build/tasks.py index 0dcac04bb8..13355ac043 100644 --- a/src/backend/InvenTree/build/tasks.py +++ b/src/backend/InvenTree/build/tasks.py @@ -115,9 +115,21 @@ def delete_build_outputs(build_id: int, output_ids: list, **kwargs): with transaction.atomic(): for output_id in output_ids: - output = StockItem.objects.filter(pk=output_id).first() - if output: - build.delete_output(output) + # Lock the output row, and re-check that it is still "in production" - + # it may have been processed already (e.g. by a duplicated task) + output = StockItem.objects.select_for_update().filter(pk=output_id).first() + + if not output: + continue + + if not output.is_building: + logger.warning( + 'Build output <%s> is no longer in production - skipping deletion', + output.pk, + ) + continue + + build.delete_output(output) @tracer.start_as_current_span('scrap_build_outputs') @@ -149,16 +161,33 @@ def scrap_build_outputs( with transaction.atomic(): for item in outputs: - output = StockItem.objects.filter(pk=item['output_id']).first() - if output: - build.scrap_build_output( - output, - item.get('quantity'), - location, - user=user, - notes=notes, - discard_allocations=discard_allocations, + # Lock the output row, and re-check that it is still "in production" - + # it may have been processed already (e.g. by a duplicated task) + output = ( + StockItem.objects + .select_for_update() + .filter(pk=item['output_id']) + .first() + ) + + if not output: + continue + + if not output.is_building: + logger.warning( + 'Build output <%s> is no longer in production - skipping scrap', + output.pk, ) + continue + + build.scrap_build_output( + output, + item.get('quantity'), + location, + user=user, + notes=notes, + discard_allocations=discard_allocations, + ) @tracer.start_as_current_span('complete_build_outputs') @@ -194,17 +223,34 @@ def complete_build_outputs( with transaction.atomic(): for item in outputs: - output = StockItem.objects.filter(pk=item['output_id']).first() - if output: - build.complete_build_output( - output, - user, - quantity=item.get('quantity'), - location=location, - status=status, - notes=notes, - required_tests=required_tests, + # Lock the output row, and re-check that it is still "in production" - + # it may have been processed already (e.g. by a duplicated task) + output = ( + StockItem.objects + .select_for_update() + .filter(pk=item['output_id']) + .first() + ) + + if not output: + continue + + if not output.is_building: + logger.warning( + 'Build output <%s> is no longer in production - skipping completion', + output.pk, ) + continue + + build.complete_build_output( + output, + user, + quantity=item.get('quantity'), + location=location, + status=status, + notes=notes, + required_tests=required_tests, + ) @tracer.start_as_current_span('cancel_build') diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index a4a35c1a5e..2b9c6d9e3e 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -837,9 +837,7 @@ class BuildAllocationTest(BuildAPITest): ) # Test a fractional quantity when the *available* quantity is less than 1 - si = StockItem.objects.create( - part=si.part, quantity=0.3159, tree_id=0, level=0, lft=0, rght=0 - ) + si = StockItem.objects.create(part=si.part, quantity=0.3159) self.post( self.url, diff --git a/src/backend/InvenTree/build/test_build.py b/src/backend/InvenTree/build/test_build.py index f0ce20a72c..00e134340b 100644 --- a/src/backend/InvenTree/build/test_build.py +++ b/src/backend/InvenTree/build/test_build.py @@ -26,7 +26,12 @@ from InvenTree.unit_test import ( ) from order.models import PurchaseOrder, PurchaseOrderLineItem from part.models import BomItem, BomItemSubstitute, Part, PartTestTemplate -from stock.models import StockItem, StockItemTestResult, StockLocation +from stock.models import ( + StockItem, + StockItemTestResult, + StockItemTracking, + StockLocation, +) from stock.status_codes import StockStatus from users.models import Owner @@ -527,15 +532,14 @@ class BuildTest(BuildTestBase): # Return a partial quantity of each item to stock for item in consumed_items: - self.assertEqual(item.get_descendant_count(), 0) q = item.quantity self.assertGreater(item.quantity, 1) item.return_to_stock(location, merge=False, quantity=1) item.refresh_from_db() self.assertEqual(item.quantity, q - 1) - self.assertEqual(item.get_descendant_count(), 1) + self.assertEqual(item.children.count(), 1) self.assertFalse(item.is_in_stock()) - child = item.get_descendants().first() + child = item.children.first() self.assertTrue(child.is_in_stock()) def test_change_part(self): @@ -643,6 +647,122 @@ class BuildTest(BuildTestBase): for output in outputs: self.assertFalse(output.is_building) + def test_complete_output_stale_build_instance(self): + """The 'completed' count is incremented atomically at the database level. + + Simulates two concurrent processes completing different outputs of the + same build, each holding its own (stale) copy of the Build instance. + """ + self.stock_1_1.quantity = 1000 + self.stock_1_1.save() + + self.stock_2_1.quantity = 30 + self.stock_2_1.save() + + self.build.issue_build() + + # Allocate non-tracked parts + self.allocate_stock( + None, + { + self.stock_1_1: self.stock_1_1.quantity, + self.stock_1_2: 10, + self.stock_2_1: 30, + }, + ) + + # Allocate tracked parts against each output + self.allocate_stock(self.output_1, {self.stock_3_1: 6}) + self.allocate_stock(self.output_2, {self.stock_3_1: 14}) + + # Two independent in-memory copies of the same build + build_a = Build.objects.get(pk=self.build.pk) + build_b = Build.objects.get(pk=self.build.pk) + + build_a.complete_build_output(self.output_1, None) + build_b.complete_build_output(self.output_2, None) + + # Both completions must be counted + self.build.refresh_from_db() + self.assertEqual(self.build.completed, 10) + + def test_complete_allocation_stale_build_line(self): + """The 'consumed' count is incremented atomically at the database level. + + Simulates two concurrent workers completing different allocations + against the same BuildLine, each holding its own (stale) copy of the line. + """ + self.build.issue_build() + + self.allocate_stock(None, {self.stock_1_1: 3, self.stock_1_2: 5}) + + alloc_a, alloc_b = BuildItem.objects.filter(build_line=self.line_1).order_by( + 'pk' + ) + + # Cache a separate copy of the BuildLine on each allocation + self.assertEqual(alloc_a.build_line.consumed, 0) + self.assertEqual(alloc_b.build_line.consumed, 0) + + alloc_a.complete_allocation(user=self.user) + alloc_b.complete_allocation(user=self.user) + + # Both consumed quantities must be counted + self.line_1.refresh_from_db() + self.assertEqual(self.line_1.consumed, 8) + + def test_complete_zero_quantity_allocation(self): + """A zero-quantity allocation is removed cleanly on completion. + + Regression test: completing a BuildItem with quantity=0 (permitted by + the model validators) crashed with an AttributeError, blocking build + completion until the empty allocation was manually removed. + """ + self.build.issue_build() + + # An allocation with zero quantity, against an item with stock available + alloc = BuildItem.objects.create( + build_line=self.line_1, stock_item=self.stock_1_2, quantity=0 + ) + + n_items = StockItem.objects.count() + + alloc.complete_allocation(user=self.user) + + # The empty allocation is deleted, with no stock operations performed + self.assertFalse(BuildItem.objects.filter(pk=alloc.pk).exists()) + self.assertEqual(StockItem.objects.count(), n_items) + + self.stock_1_2.refresh_from_db() + self.assertEqual(self.stock_1_2.quantity, 100) + self.assertIsNone(self.stock_1_2.consumed_by) + + self.line_1.refresh_from_db() + self.assertEqual(self.line_1.consumed, 0) + + # An allocation whose stock item has been depleted elsewhere + # is also removed cleanly (allocated quantity clamps to zero) + depleted = StockItem.objects.create( + part=self.sub_part_1, quantity=5, delete_on_deplete=False + ) + alloc = BuildItem.objects.create( + build_line=self.line_1, stock_item=depleted, quantity=5 + ) + + depleted.take_stock(5, self.user) + depleted.refresh_from_db() + self.assertEqual(depleted.quantity, 0) + + alloc.complete_allocation(user=self.user) + + self.assertFalse(BuildItem.objects.filter(pk=alloc.pk).exists()) + + depleted.refresh_from_db() + self.assertIsNone(depleted.consumed_by) + + self.line_1.refresh_from_db() + self.assertEqual(self.line_1.consumed, 0) + def test_complete_with_required_tests(self): """Test the prevention completion when a required test is missing feature.""" # with required tests incompleted the save should fail @@ -1263,6 +1383,72 @@ class BuildTaskTests(BuildTestBase): self.build.complete_build_output(self.output_1, None) self.build.complete_build_output(self.output_2, None) + # ----------------------------------------------------------------------- + # complete_build_outputs / scrap_build_outputs tasks + # ----------------------------------------------------------------------- + + def test_complete_outputs_task_is_idempotent(self): + """Duplicate execution of the output completion task must not double-count. + + Regression test: the task never re-checked 'is_building', so a duplicated + (or redelivered) task run completed the same outputs twice - inflating the + 'completed' count for the build order and duplicating stock history. + """ + self.build.issue_build() + + outputs = [{'output_id': self.output_1.pk}, {'output_id': self.output_2.pk}] + + build.tasks.complete_build_outputs( + self.build.pk, + outputs, + self.location.pk, + StockStatus.OK.value, + user_id=self.user.pk, + ) + + self.build.refresh_from_db() + self.output_1.refresh_from_db() + + self.assertEqual(self.build.completed, 10) + self.assertFalse(self.output_1.is_building) + + n_tracking = StockItemTracking.objects.count() + + # Run the task again (simulating a duplicated / redelivered task) + build.tasks.complete_build_outputs( + self.build.pk, + outputs, + self.location.pk, + StockStatus.OK.value, + user_id=self.user.pk, + ) + + # The 'completed' count has not been double-counted, + # and no additional stock history has been generated + self.build.refresh_from_db() + self.assertEqual(self.build.completed, 10) + self.assertEqual(StockItemTracking.objects.count(), n_tracking) + + def test_complete_output_twice_rejected(self): + """Completing or scrapping an already-completed output must be rejected. + + Regression test: neither complete_build_output() nor scrap_build_output() + re-checked the 'is_building' state of the output. + """ + self.build.issue_build() + + self.build.complete_build_output(self.output_1, None) + + with self.assertRaises(ValidationError): + self.build.complete_build_output(self.output_1, None) + + with self.assertRaises(ValidationError): + self.build.scrap_build_output(self.output_1, None, self.location) + + # An output belonging to a *different* build order is also rejected + with self.assertRaises(ValidationError): + self.build.complete_build_output(self.stockitem_wo_required_test, None) + # ----------------------------------------------------------------------- # cancel_build task # ----------------------------------------------------------------------- diff --git a/src/backend/InvenTree/common/admin.py b/src/backend/InvenTree/common/admin.py index 271e22453b..a85f5cfc9f 100644 --- a/src/backend/InvenTree/common/admin.py +++ b/src/backend/InvenTree/common/admin.py @@ -10,7 +10,7 @@ import common.validators class ParameterTemplateAdmin(admin.ModelAdmin): """Admin interface for ParameterTemplate objects.""" - list_display = ('name', 'description', 'model_type', 'units') + list_display = ('name', 'description', 'model_type', 'units', 'unique') search_fields = ('name', 'description') diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index 418f25025a..ea7e46a647 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -978,7 +978,7 @@ class ParameterTemplateFilter(FilterSet): """Metaclass options.""" model = common.models.ParameterTemplate - fields = ['name', 'units', 'checkbox', 'enabled'] + fields = ['name', 'units', 'checkbox', 'enabled', 'unique'] has_choices = rest_filters.BooleanFilter( method='filter_has_choices', label='Has Choice' diff --git a/src/backend/InvenTree/common/currency.py b/src/backend/InvenTree/common/currency.py index adb3b55cff..ca936c6e2d 100644 --- a/src/backend/InvenTree/common/currency.py +++ b/src/backend/InvenTree/common/currency.py @@ -162,13 +162,21 @@ def currency_exchange_plugins() -> Optional[list]: def get_price( instance, quantity, - moq=True, - multiples=True, - currency=None, + moq: bool = True, + multiples: bool = True, + currency: Optional[str] = None, break_name: str = 'price_breaks', ): """Calculate the price based on quantity price breaks. + Arguments: + instance: The model instance which contains the price break information + quantity: The quantity to calculate the price for + moq: If True, then minimum order quantity will be observed (CURRENTLY NOT IMPLEMENTED) + multiples: If True, then order multiples will be observed + currency: The currency code to use for the calculation (default is None) + break_name: The name of the price break field on the instance (default is 'price_breaks') + - Don't forget to add in flat-fee cost (base_cost field) - If MOQ (minimum order quantity) is required, bump quantity - If order multiples are to be observed, then we need to calculate based on that, too @@ -185,7 +193,7 @@ def get_price( return None # Check if quantity is fraction and disable multiples - multiples = quantity % 1 == 0 + multiples = multiples and (quantity % 1 == 0) # Order multiples if multiples: diff --git a/src/backend/InvenTree/common/migrations/0047_parametertemplate_unique.py b/src/backend/InvenTree/common/migrations/0047_parametertemplate_unique.py new file mode 100644 index 0000000000..cc2ee1eed3 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0047_parametertemplate_unique.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.15 on 2026-07-14 00:05 + +from django.db import migrations, models +from common.models import ParameterTemplate + +class Migration(migrations.Migration): + + dependencies = [ + ("common", "0046_alter_emailmessage_global_id_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="parametertemplate", + name="unique", + field=models.PositiveIntegerField( + choices=ParameterTemplate.UniqueOptions.choices, + default=0, + help_text="Enforce uniqueness of linked parameter values against this template", + verbose_name="Uniqueness", + ), + ), + ] diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index e9e30d1f42..7bb20bb133 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -1391,21 +1391,27 @@ class PriceBreak(MetaMixin): help_text=_('Unit price at specified quantity'), ) - def convert_to(self, currency_code): + def convert_to(self, currency_code: str, raise_error: bool = False): """Convert the unit-price at this price break to the specified currency code. - Args: + Arguments: currency_code: The currency code to convert to (e.g "USD" or "AUD") + raise_error: If True, raise an error if the conversion fails. If False, return None. """ try: converted = convert_money(self.price, currency_code) - except MissingRate: + except MissingRate: # pragma: no cover + InvenTree.exceptions.log_error('PriceBreak.convert_to') logger.warning( 'No currency conversion rate available for %s -> %s', self.price_currency, currency_code, ) - return self.price.amount + + if raise_error: + raise + + return None return converted.amount @@ -2601,6 +2607,19 @@ class ParameterTemplate( choice_fnc = common.validators.parameter_template_model_options + class UniqueOptions(models.IntegerChoices): + """Enumeration of uniqueness options for a ParameterTemplate. + + Attributes: + NONE: No uniqueness requirement is enforced (default) + MODEL_TYPE: Linked parameter values must be unique for a given model type + GLOBAL: Linked parameter values must be unique across all model types + """ + + NONE = 0, _('No uniqueness required') + MODEL_TYPE = 1, _('Unique for model type') + GLOBAL = 2, _('Globally unique') + @staticmethod def get_api_url() -> str: """Return the API URL associated with the ParameterTemplate model.""" @@ -2744,6 +2763,15 @@ class ParameterTemplate( help_text=_('Is this parameter template enabled?'), ) + unique = models.PositiveIntegerField( + default=UniqueOptions.NONE, + choices=UniqueOptions.choices, + verbose_name=_('Uniqueness'), + help_text=_( + 'Enforce uniqueness of linked parameter values against this template' + ), + ) + @receiver( post_save, sender=ParameterTemplate, dispatch_uid='post_save_parameter_template' @@ -2849,6 +2877,9 @@ class Parameter( except ValidationError as e: raise ValidationError({'data': e.message}) + # Validate the parameter data against any uniqueness requirements imposed by the template + self.validate_uniqueness() + if InvenTree.ready.isReadOnlyCommand(): # Skip plugin validation checks during read-only management commands return @@ -2896,6 +2927,42 @@ class Parameter( if math.isnan(self.data_numeric) or math.isinf(self.data_numeric): self.data_numeric = None + def validate_uniqueness(self): + """Ensure that this Parameter satisfies any uniqueness requirements imposed by its template. + + The ParameterTemplate.unique field determines the scope of the uniqueness check: + + - NONE: No uniqueness check is performed + - MODEL_TYPE: The value must be unique amongst other parameters (for this template) linked to the same model type + - GLOBAL: The value must be unique amongst all other parameters linked to this template + + Note: If the template defines a set of 'units', the comparison is performed against the + normalized 'data_numeric' value, so that equivalent values expressed in different + (but compatible) units are correctly detected as duplicates (e.g. '1k' and '1000' ohms). + """ + uniqueness = self.template.unique + + if uniqueness == ParameterTemplate.UniqueOptions.NONE: + return + + if self.template.units and self.data_numeric is not None: + query = Parameter.objects.filter( + template=self.template, data_numeric=self.data_numeric + ) + else: + query = Parameter.objects.filter( + template=self.template, data__iexact=self.data + ) + + if self.pk: + query = query.exclude(pk=self.pk) + + if uniqueness == ParameterTemplate.UniqueOptions.MODEL_TYPE: + query = query.filter(model_type=self.model_type) + + if query.exists(): + raise ValidationError({'data': _('Parameter value must be unique')}) + def check_permission(self, permission, user): """Check if the user has the required permission for this parameter.""" from InvenTree.models import InvenTreeParameterMixin diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 0020eac8c0..b9e473ac84 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -979,6 +979,7 @@ class ParameterTemplateSerializer( 'choices', 'selectionlist', 'enabled', + 'unique', ] # Note: The choices are overridden at run-time on class initialization diff --git a/src/backend/InvenTree/common/setting/user.py b/src/backend/InvenTree/common/setting/user.py index f5a2cd3f38..7d7891854d 100644 --- a/src/backend/InvenTree/common/setting/user.py +++ b/src/backend/InvenTree/common/setting/user.py @@ -223,6 +223,12 @@ USER_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { ('MMM DD YYYY', 'Feb 22 2022'), ], }, + 'ENABLE_PREVIEW_PANEL': { + 'name': _('Table Preview Panel'), + 'description': _('Display a preview panel when selecting items in tables'), + 'default': False, + 'validator': bool, + }, 'DISPLAY_STOCKTAKE_TAB': { 'name': _('Show Stock History'), 'description': _('Display stock history information in the part detail page'), diff --git a/src/backend/InvenTree/common/test_api.py b/src/backend/InvenTree/common/test_api.py index 44e127ee22..72a141bfa9 100644 --- a/src/backend/InvenTree/common/test_api.py +++ b/src/backend/InvenTree/common/test_api.py @@ -2,6 +2,7 @@ import io +from django.core.exceptions import ValidationError from django.core.files.base import ContentFile from django.core.files.storage import default_storage from django.core.files.uploadedfile import SimpleUploadedFile @@ -73,6 +74,7 @@ class ParameterAPITests(InvenTreeAPITestCase): 'model_type', 'selectionlist', 'enabled', + 'unique', ]: self.assertIn( field, @@ -567,6 +569,179 @@ class ParameterAPITests(InvenTreeAPITestCase): common.models.Parameter.objects.filter(pk=parameter.pk).exists() ) + def test_parameter_uniqueness(self): + """Test the uniqueness options which can be applied to a ParameterTemplate.""" + from company.models import Company + from part.models import Part + + part_a = Part.objects.create(name='Part A', description='A part for testing') + part_b = Part.objects.create(name='Part B', description='A part for testing') + part_c = Part.objects.create(name='Part C', description='A part for testing') + company = Company.objects.create( + name='Test Company', description='A company for testing' + ) + + template = common.models.ParameterTemplate.objects.create( + name='Serial Number', description='A serial number parameter' + ) + + self.assertEqual( + template.unique, common.models.ParameterTemplate.UniqueOptions.NONE + ) + + param_a = common.models.Parameter( + template=template, + model_type=part_a.get_content_type(), + model_id=part_a.pk, + data='ABC123', + ) + param_a.full_clean() + param_a.save() + + # No uniqueness requirement - a duplicate value against a different part is fine + param_b = common.models.Parameter( + template=template, + model_type=part_b.get_content_type(), + model_id=part_b.pk, + data='ABC123', + ) + param_b.full_clean() + param_b.save() + + # Re-saving the existing instance (unchanged) should not raise any errors + param_a.full_clean() + param_a.save() + + # Now, require uniqueness *per model type* + template.unique = common.models.ParameterTemplate.UniqueOptions.MODEL_TYPE + template.save() + + # A new Part with the same value should be rejected + with self.assertRaises(ValidationError): + common.models.Parameter( + template=template, + model_type=part_c.get_content_type(), + model_id=part_c.pk, + data='ABC123', + ).full_clean() + + # A case-insensitive match should also be rejected + with self.assertRaises(ValidationError): + common.models.Parameter( + template=template, + model_type=part_c.get_content_type(), + model_id=part_c.pk, + data='abc123', + ).full_clean() + + # A different model type entirely is not affected by the 'model type' restriction + param_company = common.models.Parameter( + template=template, + model_type=company.get_content_type(), + model_id=company.pk, + data='ABC123', + ) + param_company.full_clean() + param_company.save() + + # Finally, require the value to be *globally* unique + template.unique = common.models.ParameterTemplate.UniqueOptions.GLOBAL + template.save() + + with self.assertRaises(ValidationError): + common.models.Parameter( + template=template, + model_type=part_c.get_content_type(), + model_id=part_c.pk, + data='ABC123', + ).full_clean() + + def test_parameter_uniqueness_units(self): + """Test that uniqueness checks are unit-aware for templates which define units. + + Values expressed in different (but compatible) units which represent the + same physical quantity must be detected as duplicates. + """ + from part.models import Part + + part_a = Part.objects.create(name='Part A', description='A part for testing') + part_b = Part.objects.create(name='Part B', description='A part for testing') + + template = common.models.ParameterTemplate.objects.create( + name='Resistance', + units='ohm', + description='A globally unique resistance parameter', + unique=common.models.ParameterTemplate.UniqueOptions.GLOBAL, + ) + + param_a = common.models.Parameter( + template=template, + model_type=part_a.get_content_type(), + model_id=part_a.pk, + data='1000', + ) + param_a.full_clean() + param_a.save() + + # A value expressed as '1k' ohms is numerically identical to '1000' ohms + with self.assertRaises(ValidationError): + common.models.Parameter( + template=template, + model_type=part_b.get_content_type(), + model_id=part_b.pk, + data='1k', + ).full_clean() + + # A distinct value (in different units) is not a duplicate + param_b = common.models.Parameter( + template=template, + model_type=part_b.get_content_type(), + model_id=part_b.pk, + data='2k', + ) + param_b.full_clean() + param_b.save() + + def test_copy_unique_parameters(self): + """Test that 'unique' parameters are skipped when copying parameters between model instances.""" + from part.models import Part + + part_a = Part.objects.create(name='Part A', description='A part for testing') + part_b = Part.objects.create(name='Part B', description='A part for testing') + + normal_template = common.models.ParameterTemplate.objects.create( + name='Color', description='A normal (non-unique) parameter' + ) + + unique_template = common.models.ParameterTemplate.objects.create( + name='Serial Number', + description='A globally unique parameter', + unique=common.models.ParameterTemplate.UniqueOptions.GLOBAL, + ) + + common.models.Parameter.objects.create( + template=normal_template, + model_type=part_a.get_content_type(), + model_id=part_a.pk, + data='Red', + ) + + common.models.Parameter.objects.create( + template=unique_template, + model_type=part_a.get_content_type(), + model_id=part_a.pk, + data='ABC123', + ) + + # Copy parameters from part_a to part_b + part_b.copy_parameters_from(part_a) + + # The non-unique parameter should have been copied + self.assertEqual(part_b.get_parameter('Color').data, 'Red') + + # The unique parameter should *not* have been copied, to avoid a conflicting value + self.assertIsNone(part_b.get_parameter('Serial Number')) + def test_parameter_annotation(self): """Test that we can annotate parameters against a queryset.""" from company.models import Company diff --git a/src/backend/InvenTree/company/tests.py b/src/backend/InvenTree/company/tests.py index b5389bfbeb..3187b0ee36 100644 --- a/src/backend/InvenTree/company/tests.py +++ b/src/backend/InvenTree/company/tests.py @@ -1,7 +1,6 @@ """Unit tests for the models in the 'company' app.""" import os -from decimal import Decimal from django.core.exceptions import ValidationError from django.test import TestCase @@ -99,24 +98,6 @@ class CompanySimpleTest(TestCase): self.assertEqual(p(45), 315) self.assertEqual(p(55), 68.75) - def test_part_pricing(self): - """Unit tests for supplier part pricing.""" - m2x4 = Part.objects.get(name='M2x4 LPHS') - - self.assertEqual(m2x4.get_price_info(5.5), '38.5 - 41.25') - self.assertEqual(m2x4.get_price_info(10), '70 - 75') - self.assertEqual(m2x4.get_price_info(100), '125 - 350') - - pmin, pmax = m2x4.get_price_range(5) - self.assertEqual(pmin, 35) - self.assertEqual(pmax, 37.5) - - m3x12 = Part.objects.get(name='M3x12 SHCS') - - self.assertEqual(m3x12.get_price_info(0.3), Decimal('2.4')) - self.assertEqual(m3x12.get_price_info(3), Decimal('24')) - self.assertIsNotNone(m3x12.get_price_info(50)) - def test_currency_validation(self): """Test validation for currency selection.""" # Create a company with a valid currency code (should pass) diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py index ce64e0677d..8c62ac5d3e 100644 --- a/src/backend/InvenTree/importer/models.py +++ b/src/backend/InvenTree/importer/models.py @@ -341,7 +341,7 @@ class DataImportSession(models.Model): logger.error('Failed to load data file') return - headers = df.headers + headers = importer.operations.normalize_headers(df.headers) imported_rows = [] diff --git a/src/backend/InvenTree/importer/operations.py b/src/backend/InvenTree/importer/operations.py index 0efca9017c..7334f2badf 100644 --- a/src/backend/InvenTree/importer/operations.py +++ b/src/backend/InvenTree/importer/operations.py @@ -72,17 +72,33 @@ def extract_column_names(data_file) -> list: """ data = load_data_file(data_file) - headers = [] + return normalize_headers(data.headers) - for idx, header in enumerate(data.headers): + +def normalize_headers(headers) -> list: + """Normalize a list of raw column headers extracted from a data file. + + Strips whitespace from each header, and generates a default header + for any column that does not have one. Must be used consistently + wherever column headers are extracted, so that column names used for + field mapping match the column names used when extracting row data. + + Args: + headers: List of raw header values (as returned by tablib) + + Returns: + List of normalized column names + """ + result = [] + + for idx, header in enumerate(headers): if header: - header = str(header).strip() - headers.append(header) + result.append(str(header).strip()) else: # If the header is empty, generate a default header - headers.append(f'Column {idx + 1}') + result.append(f'Column {idx + 1}') - return headers + return result def get_field_label(field) -> Optional[str]: diff --git a/src/backend/InvenTree/importer/tests.py b/src/backend/InvenTree/importer/tests.py index 6b3693f349..16d50dd390 100644 --- a/src/backend/InvenTree/importer/tests.py +++ b/src/backend/InvenTree/importer/tests.py @@ -77,6 +77,80 @@ class ImporterTest(ImporterMixin, InvenTreeTestCase): # Check that the new companies have been created self.assertEqual(n + 12, Company.objects.count()) + def test_import_header_whitespace(self): + """Test that column headers with leading/trailing whitespace are handled correctly. + + Regression test: column mappings are built from *stripped* header names, but + row data was previously extracted using the *raw* (unstripped) headers. If a + header had surrounding whitespace, the mapped column name would never match a + key in the row data, so that field was silently skipped during import. + """ + from company.models import Company + + n = Company.objects.count() + + # Pad each header in the source file with extra whitespace + raw = self.helper_file('companies.csv').read() + lines = raw.splitlines() + headers = [f' {header} ' for header in lines[0].split(',')] + padded_data = '\n'.join([','.join(headers), *lines[1:]]) + + data_file = ContentFile(padded_data, 'companies_whitespace.csv') + + session = DataImportSession.objects.create( + data_file=data_file, model_type='company' + ) + + session.extract_columns() + + # Extracted column names should have whitespace stripped + for col in session.columns: + self.assertEqual(col, col.strip()) + + # Field mappings should be created correctly, against the *stripped* names + for field, col in [ + ('website', 'Website'), + ('is_customer', 'Is customer'), + ('phone', 'Phone number'), + ('description', 'Company description'), + ('active', 'Active'), + ]: + self.assertTrue( + session.column_mappings.filter(field=field, column=col).exists() + ) + + # Run the data import + session.import_data() + self.assertEqual(session.rows.count(), 12) + + rows = list(session.rows.all()) + + # Row data keys must be stripped, to match the mapped column names + for row in rows: + for key in row.row_data: + self.assertEqual(key, key.strip()) + + # Find the 'Arrow' row, and check that mapped fields were actually extracted + arrow_row = next(row for row in rows if row.data.get('name') == 'Arrow') + self.assertEqual(arrow_row.data.get('website'), 'https://www.arrow.com/') + self.assertEqual(arrow_row.data.get('description'), 'Arrow Electronics') + self.assertEqual(arrow_row.data.get('is_customer'), False) + + for row in rows: + self.assertIsNotNone(row.data.get('name', None)) + self.assertTrue(row.valid) + + row.validate(commit=True) + self.assertTrue(row.complete) + + # All rows accepted: rows and mappings are cleared, session is retained + session.refresh_from_db() + self.assertEqual(session.rows.count(), 0) + self.assertEqual(session.column_mappings.count(), 0) + + # Check that the new companies have been created + self.assertEqual(n + 12, Company.objects.count()) + def test_field_defaults(self): """Test default field values.""" diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 930237750f..2bec0f1fe7 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -23,31 +23,31 @@ msgstr "نقطة نهاية API غير موجودة" #: InvenTree/api.py:442 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "يجب أن يكون قائمة لـ عناصر مقدم لـ bulk operation" #: InvenTree/api.py:449 msgid "Items must be provided as a list" -msgstr "" +msgstr "يجب أن يكون عناصر مقدم بصفته قائمة" #: InvenTree/api.py:457 msgid "Invalid items list provided" -msgstr "" +msgstr "غير صالح عناصر قائمة مقدم" #: InvenTree/api.py:462 msgid "All filter must only be used with true" -msgstr "" +msgstr "الكل تصفية يجب فقط يكون مستخدم مع صحيح" #: InvenTree/api.py:467 msgid "No items match the provided criteria" -msgstr "" +msgstr "لا عناصر مطابقة ال مقدم criteria" #: InvenTree/api.py:491 msgid "No data provided" -msgstr "" +msgstr "لا بيانات مقدم" #: InvenTree/api.py:507 msgid "This field must be unique." -msgstr "" +msgstr "يجب أن يكون هذا حقل فريد." #: InvenTree/api.py:836 InvenTree/models.py:1345 msgid "User does not have permission to view this model" @@ -89,7 +89,7 @@ msgstr "تعذّر تحويل {original} إلى {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "الكمية المقدمة غير صحيحة" @@ -97,16 +97,16 @@ msgstr "الكمية المقدمة غير صحيحة" msgid "Error details can be found in the admin panel" msgstr "يمكن العثور على تفاصيل الخطأ في لوحة التحكم" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "أدخل التاريخ" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" -msgstr "" +msgstr "غير صالح عشري قيمة" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -126,7 +126,7 @@ msgstr "القيمة المقدمة لا تتطابق مع النمط المطل #: InvenTree/helpers.py:616 msgid "Cannot serialize more than 1000 items at once" -msgstr "" +msgstr "لا يمكن ترقيم تسلسلي المزيد من 1000 عناصر عند once" #: InvenTree/helpers.py:622 msgid "Empty serial number string" @@ -140,7 +140,7 @@ msgstr "تكرار التسلسل" #: InvenTree/helpers.py:751 InvenTree/helpers.py:770 #, python-brace-format msgid "Invalid group: {group}" -msgstr "" +msgstr "غير صالح مجموعة: {group}" #: InvenTree/helpers.py:714 #, python-brace-format @@ -154,7 +154,7 @@ msgstr "لم يتم العثور على أرقام متسلسلة" #: InvenTree/helpers.py:787 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "عدد فريد الأرقام التسلسلية ({n}) يجب مطابقة كمية ({q})" #: InvenTree/helpers.py:917 msgid "Remove HTML tags from this value" @@ -162,23 +162,23 @@ msgstr "إزالة علامات HTML من هذه القيمة" #: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "بيانات يحتوي prohibited markdown محتوى" #: InvenTree/helpers_model.py:104 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "غير صالح URL: لا hostname" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "غير صالح URL: hostname يمكن غير يكون resolved" #: InvenTree/helpers_model.py:115 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "URL points إلى خاص أو reserved IP عنوان" #: InvenTree/helpers_model.py:192 msgid "Too many redirects" -msgstr "" +msgstr "أيضًا many redirects" #: InvenTree/helpers_model.py:197 msgid "Connection error" @@ -186,35 +186,35 @@ msgstr "خطأ فى الاتصال" #: InvenTree/helpers_model.py:202 InvenTree/helpers_model.py:211 msgid "Server responded with invalid status code" -msgstr "" +msgstr "خادم responded مع غير صالح حالة رمز" #: InvenTree/helpers_model.py:207 msgid "Exception occurred" -msgstr "" +msgstr "Exception حدث" #: InvenTree/helpers_model.py:217 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "خادم responded مع غير صالح Content-Length قيمة" #: InvenTree/helpers_model.py:220 msgid "Image size is too large" -msgstr "" +msgstr "صورة حجم هو أيضًا large" #: InvenTree/helpers_model.py:232 msgid "Image download exceeded maximum size" -msgstr "" +msgstr "صورة تنزيل exceeded أقصى حجم" #: InvenTree/helpers_model.py:237 msgid "Remote server returned empty response" -msgstr "" +msgstr "بعيد خادم مرتجع فارغ استجابة" #: InvenTree/helpers_model.py:245 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:197 msgid "Email" @@ -222,11 +222,11 @@ msgstr "البريد الإلكتروني" #: InvenTree/middleware.py:126 msgid "CSRF verification failed. Ensure INVENTREE_SITE_URL and INVENTREE_TRUSTED_ORIGINS are configured correctly." -msgstr "" +msgstr "CSRF verification فشل. Ensure INVENTREE_SITE_URL و INVENTREE_TRUSTED_ORIGINS هي مهيأ correctly." #: InvenTree/middleware.py:218 msgid "You must enable two-factor authentication before doing anything else." -msgstr "" +msgstr "أنت يجب تفعيل two-factor مصادقة قبل doing anything else." #: InvenTree/models.py:129 msgid "Error running plugin validation" @@ -238,27 +238,27 @@ msgstr "البيانات الوصفية يجب أن تكون كائن القال #: InvenTree/models.py:217 msgid "Plugin Metadata" -msgstr "" +msgstr "إضافة Metadata" #: InvenTree/models.py:218 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "JSON metadata حقل، لـ استخدام حسب خارجي إضافات" #: InvenTree/models.py:401 msgid "Improperly formatted pattern" -msgstr "" +msgstr "Improperly formatted نمط" #: InvenTree/models.py:408 msgid "Unknown format key specified" -msgstr "" +msgstr "غير معروف تنسيق مفتاح محدد" #: InvenTree/models.py:414 msgid "Missing required format key" -msgstr "" +msgstr "مفقود مطلوب تنسيق مفتاح" #: InvenTree/models.py:425 msgid "Reference field cannot be empty" -msgstr "" +msgstr "مرجع حقل لا يمكن يكون فارغ" #: InvenTree/models.py:433 msgid "Reference must match required pattern" @@ -266,112 +266,152 @@ msgstr "" #: InvenTree/models.py:464 msgid "Reference number is too large" -msgstr "" +msgstr "مرجع رقم هو أيضًا large" #: InvenTree/models.py:919 msgid "Invalid choice" -msgstr "" +msgstr "غير صالح choice" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" -msgstr "" +msgstr "الاسم" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 msgid "Description" -msgstr "" +msgstr "الوصف" #: InvenTree/models.py:1047 stock/models.py:94 msgid "Description (optional)" -msgstr "" +msgstr "وصف (اختياري)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" -msgstr "" +msgstr "مسار" #: InvenTree/models.py:1167 msgid "Duplicate names cannot exist under the same parent" -msgstr "" +msgstr "نسخ names لا يمكن موجود under ال نفس الأصل" #: InvenTree/models.py:1251 msgid "Markdown notes (optional)" -msgstr "" +msgstr "Markdown ملاحظات (اختياري)" #: InvenTree/models.py:1301 msgid "Barcode Data" -msgstr "" +msgstr "باركود بيانات" #: InvenTree/models.py:1302 msgid "Third party barcode data" -msgstr "" +msgstr "Third party باركود بيانات" #: InvenTree/models.py:1308 msgid "Barcode Hash" -msgstr "" +msgstr "باركود Hash" #: InvenTree/models.py:1309 msgid "Unique hash of barcode data" -msgstr "" +msgstr "فريد hash لـ باركود بيانات" #: InvenTree/models.py:1398 msgid "Existing barcode found" -msgstr "" +msgstr "موجود باركود تم العثور" #: InvenTree/models.py:1498 msgid "Server Error" -msgstr "" +msgstr "خادم خطأ" #: InvenTree/models.py:1499 msgid "An error has been logged by the server." -msgstr "" +msgstr "خطأ لديه تم مسجل حسب ال خادم." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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:363 msgid "Must be a valid number" -msgstr "" +msgstr "يجب يكون صالح رقم" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" -msgstr "" +msgstr "العملة" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" -msgstr "" +msgstr "تحديد عملة من متاح خيارات" #: InvenTree/serializers.py:754 msgid "This field may not be null." -msgstr "" +msgstr "هذا حقل قد غير يكون null." #: InvenTree/serializers.py:760 msgid "Invalid value" -msgstr "" +msgstr "غير صالح قيمة" #: InvenTree/serializers.py:911 msgid "Invalid content type format" -msgstr "" +msgstr "غير صالح محتوى نوع تنسيق" #: InvenTree/serializers.py:914 msgid "Content type not found" -msgstr "" +msgstr "محتوى نوع غير تم العثور" #: InvenTree/serializers.py:920 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "محتوى نوع يقوم غير مطابقة مطلوب mixin class" + +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "نسخ معلمات" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "نسخ معلمات من ال أصلي عنصر" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "نسخ سطور" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "نسخ البنود من ال أصلي طلب" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "نسخ إضافي سطور" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "نسخ إضافي البنود من ال أصلي طلب" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "Duplication خيارات" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "تحديد خيارات لـ duplicating هذا عنصر" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "أصلي" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "تحديد نسخة إلى نسخ" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -527,46 +567,46 @@ msgstr "" #: InvenTree/tasks.py:677 msgid "Update Available" -msgstr "" +msgstr "تحديث متاح" #: InvenTree/tasks.py:678 msgid "An update for InvenTree is available" -msgstr "" +msgstr "تحديث لـ InvenTree هو متاح" #: InvenTree/validators.py:28 msgid "Invalid physical unit" -msgstr "" +msgstr "غير صالح physical وحدة" #: InvenTree/validators.py:34 msgid "Not a valid currency code" -msgstr "" +msgstr "غير صالح عملة رمز" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" -msgstr "" +msgstr "حالة الطلب" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" -msgstr "" +msgstr "الأصل إنتاج" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" -msgstr "" +msgstr "تضمين متغيرات" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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,427 +625,423 @@ msgstr "" #: templates/email/part_event_notification.html:15 #: templates/email/stale_stock_notification.html:17 msgid "Part" -msgstr "" +msgstr "الصنف" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" -msgstr "" +msgstr "الفئة" #: build/api.py:134 build/api.py:138 msgid "Ancestor Build" -msgstr "" +msgstr "Ancestor إنتاج" #: build/api.py:155 order/api.py:136 msgid "Assigned to me" -msgstr "" +msgstr "مسند إلى me" #: build/api.py:170 msgid "Assigned To" -msgstr "" +msgstr "مسند إلى" #: build/api.py:205 stock/api.py:936 msgid "Created before" -msgstr "" +msgstr "تم الإنشاء قبل" #: build/api.py:209 stock/api.py:940 msgid "Created after" -msgstr "" +msgstr "تم الإنشاء بعد" #: build/api.py:213 msgid "Has start date" -msgstr "" +msgstr "تاريخ لديه بدء" #: build/api.py:221 msgid "Start date before" -msgstr "" +msgstr "بدء تاريخ قبل" #: build/api.py:225 msgid "Start date after" -msgstr "" +msgstr "بدء تاريخ بعد" #: build/api.py:229 msgid "Has target date" -msgstr "" +msgstr "تاريخ لديه هدف" #: build/api.py:237 msgid "Target date before" -msgstr "" +msgstr "التاريخ المستهدف قبل" #: build/api.py:241 msgid "Target date after" -msgstr "" +msgstr "التاريخ المستهدف بعد" #: build/api.py:245 msgid "Completed before" -msgstr "" +msgstr "مكتمل قبل" #: build/api.py:249 msgid "Completed after" -msgstr "" +msgstr "مكتمل بعد" #: build/api.py:252 order/api.py:241 msgid "Min Date" -msgstr "" +msgstr "تاريخ Min" #: build/api.py:275 order/api.py:260 msgid "Max Date" -msgstr "" +msgstr "تاريخ Max" #: build/api.py:300 build/api.py:303 part/api.py:199 stock/api.py:1002 msgid "Exclude Tree" -msgstr "" +msgstr "استبعاد Tree" #: build/api.py:416 msgid "Build must be cancelled before it can be deleted" -msgstr "" +msgstr "يجب أن يكون إنتاج ملغى قبل هو يمكن يكون تم الحذف" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" -msgstr "" +msgstr "قابل للاستهلاك" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" -msgstr "" +msgstr "اختياري" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" -msgstr "" +msgstr "تجميع" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" -msgstr "" +msgstr "متتبع" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" -msgstr "" +msgstr "قابل للاختبار" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" -msgstr "" +msgstr "طلب متبقي" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" -msgstr "" +msgstr "مخصص" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" -msgstr "" +msgstr "مستهلك" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" -msgstr "" +msgstr "قيد الطلب" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" -msgstr "" +msgstr "إنتاج غير تم العثور" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" -msgstr "" +msgstr "أمر إنتاج" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" -msgstr "" +msgstr "الموقع" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" -msgstr "" +msgstr "مخرج" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "" +msgstr "تصفية حسب مخرج عنصر المخزون ID. استخدام 'null' إلى find غير مثبت إنتاج عناصر." -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" -msgstr "" +msgstr "أوامر الإنتاج" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" -msgstr "" +msgstr "تجميع BOM لديه غير تم تم التحقق" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" -msgstr "" +msgstr "أمر الإنتاج لا يمكن يكون تم الإنشاء لـ غير نشط صنف" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" -msgstr "" +msgstr "أمر الإنتاج لا يمكن يكون تم الإنشاء لـ غير مقفل صنف" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" -msgstr "" +msgstr "أوامر الإنتاج يمكن فقط يكون externally fulfilled لـ قابل للشراء أصناف" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "يجب أن يكون مسؤول مستخدم أو مجموعة محدد" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" -msgstr "" +msgstr "أمر الإنتاج صنف لا يمكن يكون تم التغيير" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" -msgstr "" +msgstr "يجب أن يكون تاريخ هدف تاريخ بعد بدء" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" -msgstr "" +msgstr "أمر الإنتاج مرجع" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 #: report/templates/report/inventree_transfer_order_report.html:26 msgid "Reference" -msgstr "" +msgstr "المرجع" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" -msgstr "" +msgstr "Brief وصف لـ ال إنتاج (اختياري)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" -msgstr "" +msgstr "أمر الإنتاج إلى الذي هذا إنتاج هو مخصص" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" -msgstr "" +msgstr "تحديد صنف إلى إنتاج" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" -msgstr "" +msgstr "طلب البيع مرجع" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" -msgstr "" +msgstr "طلب البيع إلى الذي هذا إنتاج هو مخصص" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" -msgstr "" +msgstr "المصدر موقع" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" +msgstr "تحديد موقع إلى take مخزون من لـ هذا إنتاج (ترك فارغ إلى take من أي موقع المخزون)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" -msgstr "" +msgstr "خارجي إنتاج" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" -msgstr "" +msgstr "هذا أمر الإنتاج هو fulfilled externally" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" -msgstr "" +msgstr "الوجهة موقع" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" -msgstr "" +msgstr "تحديد موقع حيث ال مكتمل عناصر سوف يكون مخزن" + +#: build/models.py:326 +msgid "Build Quantity" +msgstr "كمية إنتاج" #: build/models.py:329 -msgid "Build Quantity" -msgstr "" - -#: build/models.py:332 msgid "Number of stock items to build" -msgstr "" +msgstr "عدد عناصر المخزون إلى إنتاج" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" -msgstr "" +msgstr "مكتمل عناصر" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "عدد عناصر المخزون الذي لديه تم مكتمل" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" -msgstr "" +msgstr "حالة إنتاج" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" -msgstr "" +msgstr "إنتاج حالة رمز" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" -msgstr "" +msgstr "رمز الدفعة" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" -msgstr "" +msgstr "رمز الدفعة لـ هذا مخرجات الإنتاج" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" -msgstr "" +msgstr "تاريخ الإنشاء" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" -msgstr "" +msgstr "تاريخ إنتاج بدء" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" -msgstr "" +msgstr "مجدول بدء تاريخ لـ هذا أمر الإنتاج" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" -msgstr "" +msgstr "تاريخ هدف إكمال" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "التاريخ المستهدف لـ إنتاج إكمال. إنتاج سوف يكون متأخر بعد هذا تاريخ." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" -msgstr "" +msgstr "تاريخ الإكمال" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" -msgstr "" +msgstr "مكتمل حسب" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" -msgstr "" +msgstr "مصروف حسب" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" -msgstr "" +msgstr "مستخدم من مصروف هذا أمر الإنتاج" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" -msgstr "" +msgstr "مسؤول" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" -msgstr "" +msgstr "مستخدم أو مجموعة مسؤول لـ هذا أمر الإنتاج" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" -msgstr "" +msgstr "خارجي رابط" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" -msgstr "" +msgstr "رابط إلى خارجي URL" + +#: build/models.py:429 +msgid "Build Priority" +msgstr "إنتاج Priority" #: build/models.py:432 -msgid "Build Priority" -msgstr "" - -#: build/models.py:435 msgid "Priority of this build order" -msgstr "" +msgstr "Priority لـ هذا أمر الإنتاج" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" -msgstr "" +msgstr "مشروع رمز" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" -msgstr "" +msgstr "مشروع رمز لـ هذا أمر الإنتاج" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" -msgstr "" +msgstr "لا يمكن مكتمل أمر الإنتاج مع فتح فرعي builds" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" -msgstr "" +msgstr "لا يمكن مكتمل أمر الإنتاج مع غير مكتمل مخرجات" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" -msgstr "" +msgstr "يجب أن يكون الأرقام التسلسلية مقدم لـ قابل للتتبع أصناف" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" -msgstr "" +msgstr "لا مخرجات الإنتاج محدد" + +#: build/models.py:955 +msgid "Build output is already completed" +msgstr "مخرجات الإنتاج هو بالفعل مكتمل" #: build/models.py:958 -msgid "Build output is already completed" -msgstr "" - -#: build/models.py:961 msgid "Build output does not match Build Order" -msgstr "" +msgstr "مخرجات الإنتاج يقوم غير مطابقة أمر الإنتاج" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "يجب أن يكون الكمية أكبر من صفر" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" -msgstr "" +msgstr "كمية كمية لا يمكن يكون أكبر من ال مخرج" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" -msgstr "" +msgstr "مخرجات الإنتاج لديه غير نجح الكل مطلوب اختبارات" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "مخصص عناصر المخزون هي ما زال في الإنتاج" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "لا يمكن partially مكتمل مخرجات الإنتاج مع مخصص عناصر" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" -msgstr "" +msgstr "أمر الإنتاج بند" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" -msgstr "" +msgstr "إنتاج كائن" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: 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 @@ -1022,1217 +1058,1217 @@ msgstr "" #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" -msgstr "" +msgstr "الكمية" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" -msgstr "" +msgstr "مطلوب كمية لـ أمر الإنتاج" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" -msgstr "" +msgstr "كمية مستهلك مخزون" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "إنتاج عنصر يجب تحديد مخرجات الإنتاج، بصفته master صنف هو معلّم بصفته قابل للتتبع" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" -msgstr "" +msgstr "محدد عنصر المخزون يقوم غير مطابقة BOM سطر" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "يجب أن يكون كمية مخصص أكبر من صفر" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "يجب أن يكون الكمية 1 لـ مسلسل مخزون" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" +msgstr "مخصص كمية ({q}) يجب غير تجاوز متاح مخزون كمية ({a})" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" -msgstr "" +msgstr "عنصر المخزون هو over-allocated" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" -msgstr "" +msgstr "عنصر مخزون" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" -msgstr "" +msgstr "المصدر عنصر المخزون" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "مخزون كمية إلى تخصيص إلى إنتاج" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" -msgstr "" +msgstr "تثبيت إلى" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" -msgstr "" +msgstr "الوجهة عنصر المخزون" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" -msgstr "" +msgstr "إنتاج مستوى" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" -msgstr "" +msgstr "صنف اسم" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" -msgstr "" +msgstr "مخرجات الإنتاج" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" -msgstr "" +msgstr "مخرجات الإنتاج يقوم غير مطابقة ال الأصل إنتاج" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "مخرج صنف يقوم غير مطابقة BuildOrder صنف" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" -msgstr "" +msgstr "هذا مخرجات الإنتاج لديه بالفعل تم مكتمل" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" -msgstr "" +msgstr "هذا مخرجات الإنتاج هو غير بالكامل مخصص" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" -msgstr "" +msgstr "إدخال كمية لـ مخرجات الإنتاج" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" -msgstr "" +msgstr "عدد صحيح كمية مطلوب لـ قابل للتتبع أصناف" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "" +msgstr "عدد صحيح كمية مطلوب، بصفته ال قائمة المواد يحتوي قابل للتتبع أصناف" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" -msgstr "" +msgstr "الأرقام التسلسلية" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "إدخال الأرقام التسلسلية لـ إنتاج مخرجات" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" -msgstr "" +msgstr "موقع المخزون لـ مخرجات الإنتاج" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" -msgstr "" +msgstr "تلقائي تخصيص الأرقام التسلسلية" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" -msgstr "" +msgstr "تلقائيًا تخصيص مطلوب عناصر مع مطابق الأرقام التسلسلية" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" -msgstr "" +msgstr "ال التالي الأرقام التسلسلية بالفعل موجود أو هي غير صالح" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" -msgstr "" +msgstr "يجب أن يكون قائمة لـ إنتاج مخرجات مقدم" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" -msgstr "" +msgstr "موقع المخزون لـ scrapped مخرجات" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" -msgstr "" +msgstr "Discard تخصيصات" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" -msgstr "" +msgstr "Discard أي مخزون تخصيصات لـ scrapped مخرجات" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" -msgstr "" +msgstr "Reason لـ scrapping مخرجات الإنتاج(s)" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" -msgstr "" +msgstr "موقع لـ مكتمل إنتاج مخرجات" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" -msgstr "" +msgstr "قبول غير مكتمل تخصيص" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" -msgstr "" +msgstr "مكتمل مخرجات إذا مخزون لديه غير تم بالكامل مخصص" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" -msgstr "" +msgstr "استهلاك مخصص مخزون" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" -msgstr "" +msgstr "استهلاك أي مخزون الذي لديه بالفعل تم مخصص إلى هذا إنتاج" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" -msgstr "" +msgstr "إزالة غير مكتمل مخرجات" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" -msgstr "" +msgstr "حذف أي إنتاج مخرجات الذي لديه غير تم مكتمل" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" -msgstr "" +msgstr "غير permitted" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" -msgstr "" +msgstr "قبول بصفته مستهلك حسب هذا أمر الإنتاج" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" -msgstr "" +msgstr "Deallocate قبل completing هذا أمر الإنتاج" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" -msgstr "" +msgstr "Overallocated مخزون" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" +msgstr "How تنفيذ أنت ترغب إلى handle إضافي عناصر المخزون مسند إلى ال أمر الإنتاج" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" -msgstr "" - -#: build/serializers.py:718 -msgid "Accept Unallocated" -msgstr "" - -#: build/serializers.py:720 -msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" +msgstr "Some عناصر المخزون لديه تم overallocated" #: build/serializers.py:731 +msgid "Accept Unallocated" +msgstr "قبول غير مخصص" + +#: build/serializers.py:733 +msgid "Accept that stock items have not been fully allocated to this build order" +msgstr "قبول ذلك عناصر المخزون لديه غير تم بالكامل مخصص إلى هذا أمر الإنتاج" + +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" -msgstr "" +msgstr "مطلوب مخزون لديه غير تم بالكامل مخصص" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" -msgstr "" +msgstr "قبول غير مكتمل" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" -msgstr "" +msgstr "قبول ذلك ال مطلوب رقم لـ إنتاج مخرجات لديه غير تم مكتمل" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" -msgstr "" +msgstr "مطلوب إنتاج كمية لديه غير تم مكتمل" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" -msgstr "" +msgstr "أمر الإنتاج لديه فتح فرعي أوامر الإنتاج" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" -msgstr "" +msgstr "يجب أن يكون أمر الإنتاج في الإنتاج حالة" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" -msgstr "" +msgstr "أمر الإنتاج لديه غير مكتمل مخرجات" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" -msgstr "" +msgstr "إنتاج سطر" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" -msgstr "" +msgstr "مخرجات الإنتاج" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" -msgstr "" +msgstr "مخرجات الإنتاج يجب نقطة إلى ال نفس إنتاج" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" -msgstr "" +msgstr "إنتاج بند" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" -msgstr "" +msgstr "bom_item.صنف يجب نقطة إلى ال نفس صنف بصفته ال أمر الإنتاج" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" -msgstr "" +msgstr "يجب أن يكون عنصر في مخزون" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "" +msgstr "متاح كمية ({q}) exceeded" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" -msgstr "" +msgstr "يجب أن يكون مخرجات الإنتاج محدد لـ تخصيص لـ متتبع أصناف" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "" +msgstr "مخرجات الإنتاج لا يمكن يكون محدد لـ تخصيص لـ untracked أصناف" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" -msgstr "" +msgstr "يجب أن يكون تخصيص عناصر مقدم" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" +msgstr "موقع المخزون حيث أصناف هي إلى يكون sourced (ترك فارغ إلى take من أي موقع)" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" -msgstr "" +msgstr "استبعاد موقع" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" -msgstr "" +msgstr "استبعاد عناصر المخزون من هذا محدد موقع" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" -msgstr "" +msgstr "Interchangeable مخزون" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "" - -#: build/serializers.py:1053 -msgid "Substitute Stock" -msgstr "" - -#: build/serializers.py:1054 -msgid "Allow allocation of substitute parts" -msgstr "" - -#: build/serializers.py:1059 -msgid "Optional Items" -msgstr "" - -#: build/serializers.py:1060 -msgid "Allocate optional BOM items to build order" -msgstr "" +msgstr "عناصر المخزون في متعدد مواقع يمكن يكون مستخدم interchangeably" #: build/serializers.py:1066 -msgid "All Items" -msgstr "" +msgid "Substitute Stock" +msgstr "بديل مخزون" #: build/serializers.py:1067 +msgid "Allow allocation of substitute parts" +msgstr "السماح تخصيص لـ بديل أصناف" + +#: build/serializers.py:1072 +msgid "Optional Items" +msgstr "اختياري عناصر" + +#: build/serializers.py:1073 +msgid "Allocate optional BOM items to build order" +msgstr "تخصيص اختياري BOM عناصر إلى أمر الإنتاج" + +#: build/serializers.py:1079 +msgid "All Items" +msgstr "الكل عناصر" + +#: build/serializers.py:1080 msgid "Untracked Items" -msgstr "" +msgstr "Untracked عناصر" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" -msgstr "" +msgstr "متتبع عناصر" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" -msgstr "" +msgstr "عنصر نوع" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "تحديد عنصر نوع إلى auto-allocate" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" -msgstr "" +msgstr "مخزون Priority" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" -msgstr "" +msgstr "Preferred طلب في الذي مطابق عناصر المخزون هي مستهلك" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" -msgstr "" +msgstr "إنتاج سطور" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" -msgstr "" - -#: build/serializers.py:1143 -msgid "BOM Reference" -msgstr "" - -#: build/serializers.py:1149 -msgid "BOM Part ID" -msgstr "" +msgstr "حد تخصيص إلى هذه إنتاج سطور (ترك فارغ إلى تخصيص الكل سطور)" #: build/serializers.py:1156 +msgid "BOM Reference" +msgstr "BOM مرجع" + +#: build/serializers.py:1162 +msgid "BOM Part ID" +msgstr "BOM صنف ID" + +#: build/serializers.py:1169 msgid "BOM Part Name" -msgstr "" +msgstr "BOM صنف اسم" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" -msgstr "" +msgstr "تثبيت إلى" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" -msgstr "" +msgstr "إنتاج" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" -msgstr "" +msgstr "صنف المورد" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" -msgstr "" +msgstr "كمية مخصص" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" -msgstr "" +msgstr "إنتاج مرجع" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" -msgstr "" +msgstr "فئة الأصناف اسم" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" -msgstr "" +msgstr "قابل للتتبع" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" -msgstr "" +msgstr "موروث" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" -msgstr "" +msgstr "السماح متغيرات" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" -msgstr "" +msgstr "عنصر قائمة المواد" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" -msgstr "" +msgstr "قيد الإنتاج" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" -msgstr "" +msgstr "مجدول إلى إنتاج" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" -msgstr "" +msgstr "خارجي مخزون" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" -msgstr "" +msgstr "متاح مخزون" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" -msgstr "" +msgstr "متاح بديل مخزون" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" -msgstr "" +msgstr "متاح متغير مخزون" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" -msgstr "" +msgstr "كمية مستهلك كمية يتجاوز مخصص" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" -msgstr "" +msgstr "اختياري ملاحظات لـ ال مخزون consumption" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" -msgstr "" +msgstr "إنتاج عنصر يجب نقطة إلى ال صحيح أمر الإنتاج" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" -msgstr "" +msgstr "نسخ إنتاج عنصر تخصيص" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" -msgstr "" +msgstr "إنتاج سطر يجب نقطة إلى ال صحيح أمر الإنتاج" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" -msgstr "" +msgstr "نسخ إنتاج سطر تخصيص" -#: build/serializers.py:1802 +#: build/serializers.py:1815 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:77 order/status_codes.py:103 #: order/status_codes.py:125 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:82 order/status_codes.py:127 msgid "On Hold" -msgstr "" +msgstr "على تعليق" #: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53 #: order/status_codes.py:85 order/status_codes.py:129 msgid "Cancelled" -msgstr "" +msgstr "ملغى" #: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:670 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:84 order/status_codes.py:128 msgid "Complete" -msgstr "" +msgstr "مكتمل" #: build/tasks.py:289 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "أمر الإنتاج {build} لديه تم مكتمل" #: build/tasks.py:295 msgid "A build order has been completed" -msgstr "" +msgstr "أمر الإنتاج لديه تم مكتمل" #: build/tasks.py:426 msgid "Stock required for build order" -msgstr "" +msgstr "مخزون مطلوب لـ أمر الإنتاج" #: build/tasks.py:436 #, python-brace-format msgid "Build order {build} requires additional stock" -msgstr "" +msgstr "أمر الإنتاج {build} يتطلب additional مخزون" #: build/tasks.py:460 msgid "Overdue Build Order" -msgstr "" +msgstr "متأخر أمر الإنتاج" #: build/tasks.py:465 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "" +msgstr "أمر الإنتاج {bo} هو الآن متأخر" #: common/api.py:764 msgid "Has Thumbnail" -msgstr "" +msgstr "لديه Thumbnail" #: common/api.py:773 msgid "Is Link" -msgstr "" +msgstr "هو رابط" #: common/api.py:781 msgid "Is File" -msgstr "" +msgstr "هو ملف" #: common/api.py:828 msgid "User does not have permission to delete these attachments" -msgstr "" +msgstr "مستخدم يقوم غير لديه صلاحية إلى حذف هذه مرفقات" #: common/api.py:841 msgid "User does not have permission to edit this attachment" -msgstr "" +msgstr "مستخدم يقوم غير لديه صلاحية إلى تعديل هذا مرفق" #: common/api.py:867 msgid "User does not have permission to delete this attachment" -msgstr "" +msgstr "مستخدم يقوم غير لديه صلاحية إلى حذف هذا مرفق" #: common/api.py:1244 common/serializers.py:1016 common/serializers.py:1064 msgid "Selection list is locked" -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:110 company/api.py:155 company/api.py:311 stock/api.py:377 #: stock/api.py:1060 msgid "Tags" -msgstr "" +msgstr "وسوم" #: common/filters.py:390 msgid "Project Code Label" -msgstr "" +msgstr "مشروع رمز ملصق" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" -msgstr "" +msgstr "تم التحديث" #: common/models.py:109 common/models.py:134 order/models.py:547 msgid "Timestamp of last update" -msgstr "" +msgstr "طابع زمني لـ آخر تحديث" #: common/models.py:146 msgid "Update By" -msgstr "" +msgstr "تحديث حسب" #: common/models.py:147 msgid "User who last updated this object" -msgstr "" +msgstr "مستخدم من آخر تم التحديث هذا كائن" #: common/models.py:174 msgid "Unique project code" -msgstr "" +msgstr "فريد مشروع رمز" #: common/models.py:181 msgid "Project description" -msgstr "" +msgstr "مشروع وصف" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" -msgstr "" +msgstr "نشط" #: common/models.py:187 msgid "Is this project code active?" -msgstr "" +msgstr "هو هذا مشروع رمز نشط؟" #: common/models.py:196 msgid "User or group responsible for this project" -msgstr "" +msgstr "مستخدم أو مجموعة مسؤول لـ هذا مشروع" #: common/models.py:795 common/models.py:1311 common/models.py:1349 msgid "Settings key" -msgstr "" +msgstr "إعدادات مفتاح" #: common/models.py:799 msgid "Settings value" -msgstr "" +msgstr "إعدادات قيمة" #: common/models.py:854 msgid "Chosen value is not a valid option" -msgstr "" +msgstr "Chosen قيمة هو غير صالح خيار" #: common/models.py:870 msgid "Value must be a boolean value" -msgstr "" +msgstr "يجب أن يكون القيمة boolean قيمة" #: common/models.py:878 msgid "Value must be an integer value" -msgstr "" +msgstr "يجب أن يكون القيمة عدد صحيح قيمة" #: common/models.py:886 msgid "Value must be a valid number" -msgstr "" +msgstr "يجب أن يكون القيمة صالح رقم" #: common/models.py:911 msgid "Value does not pass validation checks" -msgstr "" +msgstr "قيمة يقوم غير نجاح validation checks" #: common/models.py:933 msgid "Key string must be unique" -msgstr "" +msgstr "يجب أن يكون مفتاح نص فريد" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 msgid "User" -msgstr "" +msgstr "المستخدم" #: common/models.py:1380 msgid "Price break quantity" -msgstr "" +msgstr "كمية سعر فاصل" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" -msgstr "" +msgstr "السعر" #: common/models.py:1388 msgid "Unit price at specified quantity" -msgstr "" +msgstr "كمية سعر الوحدة عند محدد" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" -msgstr "" +msgstr "نقطة نهاية" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "نقطة نهاية عند الذي هذا webhook هو مستلم" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" -msgstr "" +msgstr "اسم لـ هذا webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" -msgstr "" +msgstr "هو هذا webhook نشط" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" -msgstr "" +msgstr "رمز وصول" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" -msgstr "" +msgstr "رمز وصول لـ access" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" -msgstr "" +msgstr "Shared secret لـ HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" -msgstr "" +msgstr "رسالة ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" -msgstr "" +msgstr "فريد معرف لـ هذا رسالة" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" -msgstr "" +msgstr "مضيف" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" -msgstr "" +msgstr "مضيف من الذي هذا رسالة كان مستلم" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" -msgstr "" +msgstr "Header لـ هذا رسالة" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" -msgstr "" - -#: common/models.py:1625 -msgid "Endpoint on which this message was received" -msgstr "" - -#: common/models.py:1630 -msgid "Worked on" -msgstr "" +msgstr "Body لـ هذا رسالة" #: common/models.py:1631 -msgid "Was the work on this message finished?" -msgstr "" +msgid "Endpoint on which this message was received" +msgstr "نقطة نهاية على الذي هذا رسالة كان مستلم" -#: common/models.py:1757 +#: common/models.py:1636 +msgid "Worked on" +msgstr "Worked على" + +#: common/models.py:1637 +msgid "Was the work on this message finished?" +msgstr "كان ال work على هذا رسالة finished؟" + +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" -msgstr "" +msgstr "عنوان" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" -msgstr "" +msgstr "رابط" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" -msgstr "" +msgstr "قراءة" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" -msgstr "" +msgstr "كان هذا أخبار عنصر قراءة؟" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" -msgstr "" +msgstr "صورة ملف" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" -msgstr "" +msgstr "هدف نموذج نوع لـ هذا صورة" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" -msgstr "" +msgstr "هدف نموذج ID لـ هذا صورة" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" -msgstr "" +msgstr "مخصص وحدة" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" -msgstr "" +msgstr "يجب أن يكون وحدة symbol فريد" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" -msgstr "" +msgstr "يجب أن يكون وحدة اسم صالح معرف" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" -msgstr "" +msgstr "وحدة اسم" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 -msgid "Optional unit symbol" -msgstr "" - #: common/models.py:1891 +msgid "Optional unit symbol" +msgstr "اختياري وحدة symbol" + +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" -msgstr "" +msgstr "وحدة definition" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" -msgstr "" +msgstr "المرفق" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" -msgstr "" +msgstr "مفقود ملف" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" -msgstr "" +msgstr "مفقود خارجي رابط" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" -msgstr "" +msgstr "لا ملف attached إلى rename" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" -msgstr "" +msgstr "اسم الملف لا يمكن يكون فارغ" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" -msgstr "" +msgstr "غير صالح اسم الملف" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" -msgstr "" +msgstr "لا يمكن تغيير ملف extension" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" -msgstr "" +msgstr "ملف مع هذا اسم بالفعل موجود" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" -msgstr "" +msgstr "فشل في حفظ renamed ملف" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" -msgstr "" +msgstr "نموذج نوع" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" -msgstr "" - -#: common/models.py:2114 -msgid "Select file to attach" -msgstr "" +msgstr "هدف نموذج نوع لـ صورة" #: common/models.py:2120 +msgid "Select file to attach" +msgstr "تحديد ملف إلى إرفاق" + +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" -msgstr "" +msgstr "Thumbnail صورة لـ هذا مرفق" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" -msgstr "" - -#: common/models.py:2154 -msgid "Upload date" -msgstr "" - -#: common/models.py:2155 -msgid "Date the file was uploaded" -msgstr "" +msgstr "مرفق comment" #: common/models.py:2160 -msgid "Is image" -msgstr "" +msgid "Upload date" +msgstr "تاريخ رفع" #: common/models.py:2161 +msgid "Date the file was uploaded" +msgstr "تاريخ ال ملف كان تم الرفع" + +#: common/models.py:2166 +msgid "Is image" +msgstr "هو صورة" + +#: common/models.py:2167 msgid "True if this attachment is a valid image file" -msgstr "" +msgstr "صحيح إذا هذا مرفق هو صالح صورة ملف" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" -msgstr "" +msgstr "ملف حجم" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" -msgstr "" +msgstr "ملف حجم في bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" -msgstr "" - -#: common/models.py:2285 -msgid "Custom State" -msgstr "" - -#: common/models.py:2286 -msgid "Custom States" -msgstr "" +msgstr "غير صالح نموذج نوع محدد لـ مرفق" #: common/models.py:2291 -msgid "Reference Status Set" -msgstr "" +msgid "Custom State" +msgstr "مخصص حالة" #: common/models.py:2292 -msgid "Status set that is extended with this custom state" -msgstr "" +msgid "Custom States" +msgstr "مخصص States" -#: common/models.py:2296 generic/states/serializers.py:18 -msgid "Logical Key" -msgstr "" +#: common/models.py:2297 +msgid "Reference Status Set" +msgstr "مرجع حالة تعيين" #: common/models.py:2298 -msgid "State logical key that is equal to this custom state in business logic" -msgstr "" +msgid "Status set that is extended with this custom state" +msgstr "حالة تعيين ذلك هو extended مع هذا مخصص حالة" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 -msgid "Value" -msgstr "" +#: common/models.py:2302 generic/states/serializers.py:18 +msgid "Logical Key" +msgstr "منطقي مفتاح" #: common/models.py:2304 -msgid "Numerical value that will be saved in the models database" -msgstr "" +msgid "State logical key that is equal to this custom state in business logic" +msgstr "حالة منطقي مفتاح ذلك هو equal إلى هذا مخصص حالة في business logic" + +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 +msgid "Value" +msgstr "القيمة" #: common/models.py:2310 +msgid "Numerical value that will be saved in the models database" +msgstr "Numerical قيمة ذلك سوف يكون saved في ال نماذج قاعدة بيانات" + +#: common/models.py:2316 msgid "Name of the state" -msgstr "" +msgstr "اسم لـ ال حالة" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" -msgstr "" +msgstr "ملصق" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" -msgstr "" +msgstr "ملصق ذلك سوف يكون معروض في ال frontend" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" -msgstr "" +msgstr "لون" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" -msgstr "" +msgstr "لون ذلك سوف يكون معروض في ال frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" -msgstr "" +msgstr "نموذج" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" -msgstr "" - -#: common/models.py:2352 -msgid "Model must be selected" -msgstr "" - -#: common/models.py:2355 -msgid "Key must be selected" -msgstr "" +msgstr "نموذج هذا حالة هو مرتبط مع" #: common/models.py:2358 +msgid "Model must be selected" +msgstr "يجب أن يكون نموذج محدد" + +#: common/models.py:2361 +msgid "Key must be selected" +msgstr "يجب أن يكون مفتاح محدد" + +#: common/models.py:2364 msgid "Logical key must be selected" -msgstr "" +msgstr "يجب أن يكون منطقي مفتاح محدد" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" -msgstr "" - -#: common/models.py:2369 -msgid "Valid reference status class must be provided" -msgstr "" +msgstr "يجب أن يكون مفتاح مختلف من منطقي مفتاح" #: common/models.py:2375 +msgid "Valid reference status class must be provided" +msgstr "يجب أن يكون صالح مرجع حالة class مقدم" + +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" -msgstr "" +msgstr "يجب أن يكون مفتاح حالة مختلف من ال منطقي keys لـ ال مرجع" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" -msgstr "" +msgstr "يجب أن يكون منطقي مفتاح حالة في ال منطقي keys لـ ال مرجع" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" -msgstr "" +msgstr "يجب أن يكون الاسم حالة مختلف من ال names لـ ال مرجع" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" -msgstr "" +msgstr "اختيار قائمة" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" -msgstr "" +msgstr "اختيار Lists" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" -msgstr "" +msgstr "اسم لـ ال اختيار قائمة" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" -msgstr "" +msgstr "وصف لـ ال اختيار قائمة" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" -msgstr "" - -#: common/models.py:2449 -msgid "Is this selection list locked?" -msgstr "" +msgstr "مقفل" #: common/models.py:2455 +msgid "Is this selection list locked?" +msgstr "هو هذا اختيار قائمة مقفل؟" + +#: common/models.py:2461 msgid "Can this selection list be used?" -msgstr "" - -#: common/models.py:2463 -msgid "Source Plugin" -msgstr "" - -#: common/models.py:2464 -msgid "Plugin which provides the selection list" -msgstr "" +msgstr "يمكن هذا اختيار قائمة يكون مستخدم؟" #: common/models.py:2469 -msgid "Source String" -msgstr "" +msgid "Source Plugin" +msgstr "المصدر إضافة" #: common/models.py:2470 +msgid "Plugin which provides the selection list" +msgstr "إضافة الذي يوفر ال اختيار قائمة" + +#: common/models.py:2475 +msgid "Source String" +msgstr "المصدر نص" + +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" -msgstr "" +msgstr "اختياري نص identifying ال المصدر مستخدم لـ هذا قائمة" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" -msgstr "" - -#: common/models.py:2480 -msgid "Default entry for this selection list" -msgstr "" - -#: common/models.py:2485 common/models.py:3391 -msgid "Created" -msgstr "" +msgstr "افتراضي سجل" #: common/models.py:2486 -msgid "Date and time that the selection list was created" -msgstr "" +msgid "Default entry for this selection list" +msgstr "افتراضي سجل لـ هذا اختيار قائمة" -#: common/models.py:2491 -msgid "Last Updated" -msgstr "" +#: common/models.py:2491 common/models.py:3397 +msgid "Created" +msgstr "تم الإنشاء" #: common/models.py:2492 +msgid "Date and time that the selection list was created" +msgstr "تاريخ و وقت ذلك ال اختيار قائمة كان تم الإنشاء" + +#: common/models.py:2497 +msgid "Last Updated" +msgstr "آخر تم التحديث" + +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" -msgstr "" +msgstr "تاريخ و وقت ذلك ال اختيار قائمة كان آخر تم التحديث" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" -msgstr "" +msgstr "اختيار قائمة سجل" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" -msgstr "" - -#: common/models.py:2565 -msgid "Selection list to which this entry belongs" -msgstr "" +msgstr "اختيار قائمة سجلات" #: common/models.py:2571 -msgid "Value of the selection list entry" -msgstr "" +msgid "Selection list to which this entry belongs" +msgstr "اختيار قائمة إلى الذي هذا سجل belongs" #: common/models.py:2577 -msgid "Label for the selection list entry" -msgstr "" +msgid "Value of the selection list entry" +msgstr "قيمة لـ ال اختيار قائمة سجل" #: common/models.py:2583 +msgid "Label for the selection list entry" +msgstr "ملصق لـ ال اختيار قائمة سجل" + +#: common/models.py:2589 msgid "Description of the selection list entry" -msgstr "" +msgstr "وصف لـ ال اختيار قائمة سجل" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" -msgstr "" +msgstr "هو هذا اختيار قائمة سجل نشط؟" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" -msgstr "" +msgstr "معلمة قالب" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" -msgstr "" +msgstr "معلمة قوالب" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" -msgstr "" +msgstr "مربع اختيار معلمات لا يمكن لديه وحدات" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" -msgstr "" +msgstr "مربع اختيار معلمات لا يمكن لديه خيارات" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" -msgstr "" +msgstr "يجب أن يكون خيارات فريد" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" -msgstr "" - -#: common/models.py:2726 -msgid "Target model type for this parameter template" -msgstr "" +msgstr "يجب أن يكون معلمة قالب اسم فريد" #: common/models.py:2732 +msgid "Target model type for this parameter template" +msgstr "هدف نموذج نوع لـ هذا معلمة قالب" + +#: common/models.py:2738 msgid "Parameter Name" -msgstr "" +msgstr "معلمة اسم" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" -msgstr "" +msgstr "الوحدات" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" -msgstr "" - -#: common/models.py:2747 -msgid "Parameter description" -msgstr "" +msgstr "Physical وحدات لـ هذا معلمة" #: common/models.py:2753 +msgid "Parameter description" +msgstr "معلمة وصف" + +#: common/models.py:2759 msgid "Checkbox" -msgstr "" - -#: common/models.py:2754 -msgid "Is this parameter a checkbox?" -msgstr "" - -#: common/models.py:2759 part/models.py:3822 -msgid "Choices" -msgstr "" +msgstr "مربع اختيار" #: common/models.py:2760 +msgid "Is this parameter a checkbox?" +msgstr "هو هذا معلمة مربع اختيار؟" + +#: common/models.py:2765 part/models.py:3826 +msgid "Choices" +msgstr "خيارات" + +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" -msgstr "" - -#: common/models.py:2771 -msgid "Selection list for this parameter" -msgstr "" - -#: common/models.py:2776 part/models.py:3797 report/models.py:297 -msgid "Enabled" -msgstr "" +msgstr "صالح خيارات لـ هذا معلمة (comma-separated)" #: common/models.py:2777 +msgid "Selection list for this parameter" +msgstr "اختيار قائمة لـ هذا معلمة" + +#: common/models.py:2782 part/models.py:3801 report/models.py:297 +msgid "Enabled" +msgstr "مفعّل" + +#: common/models.py:2783 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "هو هذا معلمة قالب مفعّل؟" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" -msgstr "" +msgstr "معلمة" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" -msgstr "" +msgstr "معلمات" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" -msgstr "" +msgstr "غير صالح choice لـ معلمة قيمة" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "غير صالح نموذج نوع محدد لـ معلمة" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" -msgstr "" +msgstr "نموذج ID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "ID لـ ال هدف نموذج لـ هذا معلمة" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" -msgstr "" - -#: common/models.py:2986 -msgid "Parameter template" -msgstr "" - -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 -msgid "Data" -msgstr "" +msgstr "قالب" #: common/models.py:2992 -msgid "Parameter Value" -msgstr "" +msgid "Parameter template" +msgstr "معلمة قالب" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 +msgid "Data" +msgstr "بيانات" + +#: common/models.py:2998 +msgid "Parameter Value" +msgstr "معلمة قيمة" + +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2241,255 +2277,255 @@ msgstr "" #: report/templates/report/inventree_transfer_order_report.html:29 #: stock/serializers.py:845 msgid "Note" -msgstr "" +msgstr "ملاحظة" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" -msgstr "" +msgstr "اختياري ملاحظة حقل" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" -msgstr "" +msgstr "مسح الباركود" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" -msgstr "" - -#: common/models.py:3045 -msgid "User who scanned the barcode" -msgstr "" - -#: common/models.py:3050 importer/models.py:71 -msgid "Timestamp" -msgstr "" +msgstr "باركود بيانات" #: common/models.py:3051 -msgid "Date and time of the barcode scan" -msgstr "" +msgid "User who scanned the barcode" +msgstr "مستخدم من تم المسح ال باركود" + +#: common/models.py:3056 importer/models.py:71 +msgid "Timestamp" +msgstr "طابع زمني" #: common/models.py:3057 +msgid "Date and time of the barcode scan" +msgstr "تاريخ و وقت لـ ال مسح الباركود" + +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" -msgstr "" +msgstr "URL نقطة نهاية الذي processed ال باركود" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" -msgstr "" +msgstr "سياق" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" -msgstr "" +msgstr "سياق بيانات لـ ال مسح الباركود" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" -msgstr "" +msgstr "استجابة" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" -msgstr "" +msgstr "استجابة بيانات من ال مسح الباركود" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" -msgstr "" +msgstr "نتيجة" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" -msgstr "" +msgstr "كان ال مسح الباركود ناجح؟" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" -msgstr "" +msgstr "خطأ حدث" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." -msgstr "" +msgstr "INVE-E8: بريد إلكتروني سجل الحذف هو protected. تعيين INVENTREE_PROTECT_EMAIL_LOG إلى خطأ إلى السماح الحذف." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" -msgstr "" +msgstr "بريد إلكتروني رسالة" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" -msgstr "" +msgstr "بريد إلكتروني Messages" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" -msgstr "" +msgstr "تم الإرسال" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" -msgstr "" +msgstr "فشل" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" -msgstr "" +msgstr "لا Reply" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" -msgstr "" +msgstr "تتبع تسليم" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" -msgstr "" +msgstr "تتبع قراءة" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" -msgstr "" +msgstr "تتبع انقر" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" -msgstr "" +msgstr "معرف لـ هذا رسالة (might يكون مورد حسب خارجي نظام)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" -msgstr "" +msgstr "سلسلة ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" -msgstr "" +msgstr "معرف لـ هذا رسالة سلسلة (might يكون مورد حسب خارجي نظام)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" -msgstr "" +msgstr "سلسلة" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" -msgstr "" +msgstr "مرتبط سلسلة لـ هذا رسالة" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" -msgstr "" +msgstr "بريد إلكتروني سلسلة" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" -msgstr "" +msgstr "بريد إلكتروني Threads" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" -msgstr "" +msgstr "مفتاح" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" -msgstr "" +msgstr "فريد مفتاح لـ هذا سلسلة (مستخدم إلى identify ال سلسلة)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" -msgstr "" - -#: common/models.py:3386 -msgid "Started Internal" -msgstr "" - -#: common/models.py:3387 -msgid "Was this thread started internally?" -msgstr "" +msgstr "فريد معرف لـ هذا سلسلة" #: common/models.py:3392 -msgid "Date and time that the thread was created" -msgstr "" +msgid "Started Internal" +msgstr "بدأ داخلي" -#: common/models.py:3397 +#: common/models.py:3393 +msgid "Was this thread started internally?" +msgstr "كان هذا سلسلة بدأ internally؟" + +#: common/models.py:3398 +msgid "Date and time that the thread was created" +msgstr "تاريخ و وقت ذلك ال سلسلة كان تم الإنشاء" + +#: common/models.py:3403 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:611 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:127 msgid "Indicates if changing this setting requires confirmation" -msgstr "" +msgstr "يشير إذا changing هذا إعداد يتطلب confirmation" #: common/serializers.py:141 msgid "This setting requires confirmation before changing. Please confirm the change." -msgstr "" +msgstr "هذا إعداد يتطلب confirmation قبل changing. يرجى تأكيد ال تغيير." #: common/serializers.py:174 msgid "Indicates if the setting is overridden by an environment variable" -msgstr "" +msgstr "يشير إذا ال إعداد هو overridden حسب environment variable" #: common/serializers.py:176 plugin/serializers.py:293 msgid "Override" -msgstr "" +msgstr "تجاوز" #: common/serializers.py:642 msgid "Is Running" -msgstr "" +msgstr "هو قيد التشغيل" #: common/serializers.py:648 msgid "Pending Tasks" -msgstr "" +msgstr "قيد الانتظار مهام" #: common/serializers.py:654 msgid "Scheduled Tasks" -msgstr "" +msgstr "مجدول مهام" #: common/serializers.py:660 msgid "Failed Tasks" -msgstr "" +msgstr "فشل مهام" #: common/serializers.py:675 msgid "Task ID" -msgstr "" +msgstr "مهمة ID" #: common/serializers.py:675 msgid "Unique task ID" -msgstr "" +msgstr "فريد مهمة ID" #: common/serializers.py:677 msgid "Lock" @@ -2497,93 +2533,93 @@ msgstr "" #: common/serializers.py:677 msgid "Lock time" -msgstr "" +msgstr "Lock وقت" #: common/serializers.py:679 msgid "Task name" -msgstr "" +msgstr "مهمة اسم" #: common/serializers.py:681 msgid "Function" -msgstr "" +msgstr "دالة" #: common/serializers.py:681 msgid "Function name" -msgstr "" +msgstr "دالة اسم" #: common/serializers.py:683 msgid "Arguments" -msgstr "" +msgstr "وسائط" #: common/serializers.py:683 msgid "Task arguments" -msgstr "" +msgstr "مهمة وسائط" #: common/serializers.py:686 msgid "Keyword Arguments" -msgstr "" +msgstr "Keyword وسائط" #: common/serializers.py:686 msgid "Task keyword arguments" -msgstr "" +msgstr "مهمة keyword وسائط" #: common/serializers.py:809 msgid "Filename" -msgstr "" +msgstr "اسم الملف" #: common/serializers.py:816 common/serializers.py:883 #: common/serializers.py:959 importer/models.py:91 report/api.py:42 #: report/models.py:303 report/serializers.py:71 msgid "Model Type" -msgstr "" +msgstr "نموذج نوع" #: common/serializers.py:844 msgid "User does not have permission to create or edit attachments for this model" -msgstr "" +msgstr "مستخدم يقوم غير لديه صلاحية إلى إنشاء أو تعديل مرفقات لـ هذا نموذج" #: common/serializers.py:940 msgid "User does not have permission to create or edit parameters for this model" -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 "dict لـ نشط تحذير رموز" #: 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" @@ -2591,23 +2627,23 @@ msgstr "" #: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" -msgstr "" +msgstr "Announce ال نسخة ID لـ ال خادم في ال خادم حالة info (unauthenticated)" #: 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 "نص descriptor لـ ال خادم نسخة" #: 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 "استخدام ال نسخة اسم في ال title-bar" #: common/setting/system.py:233 msgid "Restrict showing `about`" @@ -2615,47 +2651,47 @@ msgstr "" #: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" -msgstr "" +msgstr "عرض ال `about` modal فقط إلى superusers" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "عرض مستخدم فائق banner" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "عرض تحذير banner في ال UI عند مسجل في بصفته مستخدم فائق" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "عرض مسؤول banner" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "عرض تحذير banner في ال 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" @@ -2663,15 +2699,15 @@ msgstr "" #: common/setting/system.py:271 msgid "List of supported currency codes" -msgstr "" +msgstr "قائمة لـ supported عملة رموز" #: 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 "How often إلى تحديث صرف rates (تعيين إلى صفر إلى تعطيل)" #: common/setting/system.py:280 common/setting/system.py:307 #: common/setting/system.py:320 common/setting/system.py:328 @@ -2681,23 +2717,23 @@ msgstr "" #: common/setting/system.py:1198 common/setting/system.py:1214 #: common/setting/system.py:1231 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 "Upload Size Limit" -msgstr "" +msgstr "رفع حجم حد" #: common/setting/system.py:291 msgid "Maximum allowable upload size for images and files" -msgstr "" +msgstr "أقصى allowable رفع حجم لـ صور و ملفات" #: common/setting/system.py:297 msgid "Strict URL Validation" @@ -2705,897 +2741,897 @@ msgstr "" #: common/setting/system.py:298 msgid "Require schema specification when validating URLs" -msgstr "" +msgstr "طلب schema specification عند validating URLs" #: common/setting/system.py:303 msgid "Update Check Interval" -msgstr "" +msgstr "تحديث فحص فاصل" #: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" -msgstr "" +msgstr "How often إلى فحص لـ updates (تعيين إلى صفر إلى تعطيل)" #: common/setting/system.py:310 msgid "Automatic Backup" -msgstr "" +msgstr "تلقائي Backup" #: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" -msgstr "" +msgstr "تفعيل تلقائي backup لـ قاعدة بيانات و media ملفات" #: common/setting/system.py:316 msgid "Auto Backup Interval" -msgstr "" +msgstr "تلقائي Backup فاصل" #: common/setting/system.py:317 msgid "Specify number of days between automated backup events" -msgstr "" +msgstr "تحديد رقم لـ أيام بين automated backup events" #: common/setting/system.py:323 msgid "Task Deletion Interval" -msgstr "" +msgstr "مهمة الحذف فاصل" #: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" -msgstr "" +msgstr "خلفية مهمة نتائج سوف يكون تم الحذف بعد محدد رقم لـ أيام" #: common/setting/system.py:332 msgid "Error Log Deletion Interval" -msgstr "" +msgstr "خطأ في سجل الحذف فاصل" #: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" -msgstr "" +msgstr "خطأ في logs سوف يكون تم الحذف بعد محدد رقم لـ أيام" #: common/setting/system.py:339 msgid "Notification Deletion Interval" -msgstr "" +msgstr "إشعار الحذف فاصل" #: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" -msgstr "" +msgstr "مستخدم إشعارات سوف يكون تم الحذف بعد محدد رقم لـ أيام" #: common/setting/system.py:348 msgid "Email Deletion Interval" -msgstr "" +msgstr "بريد إلكتروني الحذف فاصل" #: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" -msgstr "" +msgstr "بريد إلكتروني messages سوف يكون تم الحذف بعد محدد رقم لـ أيام" #: common/setting/system.py:357 msgid "Protect Email Log" -msgstr "" +msgstr "Protect بريد إلكتروني سجل" #: common/setting/system.py:358 msgid "Prevent deletion of email log entries" -msgstr "" +msgstr "منع الحذف لـ بريد إلكتروني سجل سجلات" #: common/setting/system.py:363 msgid "Barcode Support" -msgstr "" +msgstr "باركود الدعم" #: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" -msgstr "" +msgstr "تفعيل باركود ماسح الدعم في ال ويب واجهة" #: common/setting/system.py:369 msgid "Store Barcode Results" -msgstr "" +msgstr "تخزين باركود نتائج" #: common/setting/system.py:370 msgid "Store barcode scan results in the database" -msgstr "" +msgstr "تخزين مسح الباركود نتائج في ال قاعدة بيانات" #: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" -msgstr "" +msgstr "باركود Scans أقصى عد" #: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" -msgstr "" +msgstr "أقصى رقم لـ مسح الباركود نتائج إلى تخزين" #: common/setting/system.py:381 msgid "Barcode Input Delay" -msgstr "" +msgstr "باركود إدخال Delay" #: common/setting/system.py:382 msgid "Barcode input processing delay time" -msgstr "" +msgstr "باركود إدخال processing delay وقت" #: common/setting/system.py:388 msgid "Barcode Webcam Support" -msgstr "" +msgstr "باركود Webcam الدعم" #: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" -msgstr "" +msgstr "السماح باركود المسح عبر webcam في متصفح" #: common/setting/system.py:394 msgid "Barcode Show Data" -msgstr "" +msgstr "باركود عرض بيانات" #: common/setting/system.py:395 msgid "Display barcode data in browser as text" -msgstr "" +msgstr "عرض باركود بيانات في متصفح بصفته نص" #: common/setting/system.py:400 msgid "Barcode Generation Plugin" -msgstr "" +msgstr "باركود Generation إضافة" #: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" -msgstr "" +msgstr "إضافة إلى استخدام لـ داخلي باركود بيانات generation" #: common/setting/system.py:406 msgid "Part Locking" -msgstr "" +msgstr "صنف Locking" #: common/setting/system.py:407 msgid "Enable locking of parts to prevent modification" -msgstr "" +msgstr "تفعيل locking لـ أصناف إلى منع modification" #: common/setting/system.py:412 msgid "Part Revisions" -msgstr "" +msgstr "صنف مراجعات" #: common/setting/system.py:413 msgid "Enable revision field for Part" -msgstr "" +msgstr "تفعيل مراجعة حقل لـ صنف" #: common/setting/system.py:418 msgid "Assembly Revision Only" -msgstr "" +msgstr "تجميع مراجعة فقط" #: common/setting/system.py:419 msgid "Only allow revisions for assembly parts" -msgstr "" +msgstr "فقط السماح مراجعات لـ تجميع أصناف" #: common/setting/system.py:424 msgid "Allow Deletion from Assembly" -msgstr "" +msgstr "السماح الحذف من تجميع" #: common/setting/system.py:425 msgid "Allow deletion of parts which are used in an assembly" -msgstr "" +msgstr "السماح الحذف لـ أصناف الذي هي مستخدم في تجميع" #: common/setting/system.py:430 msgid "IPN Regex" -msgstr "" +msgstr "IPN تعبير نمطي" #: common/setting/system.py:431 msgid "Regular expression pattern for matching Part IPN" -msgstr "" +msgstr "Regular expression نمط لـ مطابق صنف IPN" #: common/setting/system.py:434 msgid "Allow Duplicate IPN" -msgstr "" +msgstr "السماح نسخ IPN" #: common/setting/system.py:435 msgid "Allow multiple parts to share the same IPN" -msgstr "" +msgstr "السماح متعدد أصناف إلى share ال نفس IPN" #: common/setting/system.py:440 msgid "Allow Editing IPN" -msgstr "" +msgstr "السماح تحرير IPN" #: common/setting/system.py:441 msgid "Allow changing the IPN value while editing a part" -msgstr "" +msgstr "السماح changing ال IPN قيمة أثناء تحرير صنف" #: common/setting/system.py:446 msgid "Copy Part BOM Data" -msgstr "" +msgstr "نسخ صنف BOM بيانات" #: common/setting/system.py:447 msgid "Copy BOM data by default when duplicating a part" -msgstr "" +msgstr "نسخ BOM بيانات حسب افتراضي عند duplicating صنف" #: common/setting/system.py:452 msgid "Copy Part Parameter Data" -msgstr "" +msgstr "نسخ معلمة الصنف بيانات" #: common/setting/system.py:453 msgid "Copy parameter data by default when duplicating a part" -msgstr "" +msgstr "نسخ معلمة بيانات حسب افتراضي عند duplicating صنف" #: common/setting/system.py:458 msgid "Copy Part Test Data" -msgstr "" +msgstr "نسخ صنف اختبار بيانات" #: common/setting/system.py:459 msgid "Copy test data by default when duplicating a part" -msgstr "" +msgstr "نسخ اختبار بيانات حسب افتراضي عند duplicating صنف" #: common/setting/system.py:464 msgid "Copy Category Parameter Templates" -msgstr "" +msgstr "نسخ فئة معلمة قوالب" #: common/setting/system.py:465 msgid "Copy category parameter templates when creating a part" -msgstr "" +msgstr "نسخ فئة معلمة قوالب عند creating صنف" #: common/setting/system.py:471 msgid "Parts are templates by default" -msgstr "" +msgstr "أصناف هي قوالب حسب افتراضي" #: common/setting/system.py:477 msgid "Parts can be assembled from other components by default" -msgstr "" +msgstr "أصناف يمكن يكون مجمّع من أخرى مكونات حسب افتراضي" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" -msgstr "" +msgstr "مكوّن" #: common/setting/system.py:483 msgid "Parts can be used as sub-components by default" -msgstr "" +msgstr "أصناف يمكن يكون مستخدم بصفته sub-components حسب افتراضي" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" -msgstr "" +msgstr "قابل للشراء" #: common/setting/system.py:489 msgid "Parts are purchaseable by default" -msgstr "" +msgstr "أصناف هي قابل للشراء حسب افتراضي" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" -msgstr "" +msgstr "قابل للبيع" #: common/setting/system.py:495 msgid "Parts are salable by default" -msgstr "" +msgstr "أصناف هي قابل للبيع حسب افتراضي" #: common/setting/system.py:501 msgid "Parts are trackable by default" -msgstr "" +msgstr "أصناف هي قابل للتتبع حسب افتراضي" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" -msgstr "" +msgstr "افتراضي" #: common/setting/system.py:507 msgid "Parts are virtual by default" -msgstr "" +msgstr "أصناف هي افتراضي حسب افتراضي" #: common/setting/system.py:512 msgid "Show related parts" -msgstr "" +msgstr "عرض مرتبط أصناف" #: common/setting/system.py:513 msgid "Display related parts for a part" -msgstr "" +msgstr "عرض مرتبط أصناف لـ صنف" #: common/setting/system.py:518 msgid "Initial Stock Data" -msgstr "" +msgstr "أولي مخزون بيانات" #: common/setting/system.py:519 msgid "Allow creation of initial stock when adding a new part" -msgstr "" +msgstr "السماح إنشاء لـ أولي مخزون عند إضافة جديد صنف" #: common/setting/system.py:524 msgid "Initial Supplier Data" -msgstr "" +msgstr "أولي مورد بيانات" #: common/setting/system.py:526 msgid "Allow creation of initial supplier data when adding a new part" -msgstr "" +msgstr "السماح إنشاء لـ أولي مورد بيانات عند إضافة جديد صنف" #: common/setting/system.py:532 msgid "Part Name Display Format" -msgstr "" +msgstr "صنف اسم عرض تنسيق" #: common/setting/system.py:533 msgid "Format to display the part name" -msgstr "" +msgstr "تنسيق إلى عرض ال صنف اسم" #: common/setting/system.py:539 msgid "Part Category Default Icon" -msgstr "" +msgstr "فئة الأصناف افتراضي أيقونة" #: common/setting/system.py:540 msgid "Part category default icon (empty means no icon)" -msgstr "" +msgstr "فئة الأصناف افتراضي أيقونة (فارغ means لا أيقونة)" #: common/setting/system.py:545 msgid "Minimum Pricing Decimal Places" -msgstr "" +msgstr "أدنى التسعير عشري أماكن" #: common/setting/system.py:547 msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "" +msgstr "أدنى رقم لـ عشري أماكن إلى عرض عند عرض التسعير بيانات" #: common/setting/system.py:558 msgid "Maximum Pricing Decimal Places" -msgstr "" +msgstr "أقصى التسعير عشري أماكن" #: common/setting/system.py:560 msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "" +msgstr "أقصى رقم لـ عشري أماكن إلى عرض عند عرض التسعير بيانات" #: common/setting/system.py:571 msgid "Use Supplier Pricing" -msgstr "" +msgstr "استخدام مورد التسعير" #: common/setting/system.py:573 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "" +msgstr "تضمين مورد سعر فواصل في إجمالي التسعير حسابات" #: common/setting/system.py:579 msgid "Purchase History Override" -msgstr "" +msgstr "شراء سجل تجاوز" #: common/setting/system.py:581 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "" +msgstr "تاريخي طلب الشراء التسعير overrides مورد سعر فواصل" #: common/setting/system.py:587 msgid "Use Stock Item Pricing" -msgstr "" +msgstr "استخدام عنصر المخزون التسعير" #: common/setting/system.py:589 msgid "Use pricing from manually entered stock data for pricing calculations" -msgstr "" +msgstr "استخدام التسعير من يدويًا entered مخزون بيانات لـ التسعير حسابات" #: common/setting/system.py:595 msgid "Stock Item Pricing Age" -msgstr "" +msgstr "عنصر المخزون التسعير Age" #: common/setting/system.py:597 msgid "Exclude stock items older than this number of days from pricing calculations" -msgstr "" +msgstr "استبعاد عناصر المخزون older من هذا رقم لـ أيام من التسعير حسابات" #: common/setting/system.py:604 msgid "Use Variant Pricing" -msgstr "" +msgstr "استخدام متغير التسعير" #: common/setting/system.py:605 msgid "Include variant pricing in overall pricing calculations" -msgstr "" +msgstr "تضمين متغير التسعير في إجمالي التسعير حسابات" #: common/setting/system.py:610 msgid "Active Variants Only" -msgstr "" +msgstr "نشط متغيرات فقط" #: common/setting/system.py:612 msgid "Only use active variant parts for calculating variant pricing" -msgstr "" +msgstr "فقط استخدام نشط متغير أصناف لـ calculating متغير التسعير" #: common/setting/system.py:618 msgid "Auto Update Pricing" -msgstr "" +msgstr "تلقائي تحديث التسعير" #: common/setting/system.py:620 msgid "Automatically update part pricing when internal data changes" -msgstr "" +msgstr "تلقائيًا تحديث صنف التسعير عند داخلي بيانات تغييرات" #: common/setting/system.py:626 msgid "Pricing Rebuild Interval" -msgstr "" +msgstr "التسعير Rebuild فاصل" #: common/setting/system.py:627 msgid "Number of days before part pricing is automatically updated" -msgstr "" +msgstr "عدد أيام قبل صنف التسعير هو تلقائيًا تم التحديث" #: common/setting/system.py:633 msgid "Internal Prices" -msgstr "" +msgstr "داخلي أسعار" #: common/setting/system.py:634 msgid "Enable internal prices for parts" -msgstr "" +msgstr "تفعيل داخلي أسعار لـ أصناف" #: common/setting/system.py:639 msgid "Internal Price Override" -msgstr "" +msgstr "داخلي سعر تجاوز" #: common/setting/system.py:641 msgid "If available, internal prices override price range calculations" -msgstr "" +msgstr "إذا متاح، داخلي أسعار تجاوز سعر range حسابات" #: common/setting/system.py:647 msgid "Allow BOM Zero Quantity" -msgstr "" +msgstr "كمية السماح BOM صفر" #: common/setting/system.py:649 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 عنصر لـ صنف. Enables باستخدام إعداد كمية إلى define كمية مطلوب per إنتاج، independent لـ إنتاج" #: common/setting/system.py:655 msgid "Enable label printing" -msgstr "" +msgstr "تفعيل ملصق الطباعة" #: common/setting/system.py:656 msgid "Enable label printing from the web interface" -msgstr "" +msgstr "تفعيل ملصق الطباعة من ال ويب واجهة" #: common/setting/system.py:661 msgid "Label Image DPI" -msgstr "" +msgstr "ملصق صورة DPI" #: common/setting/system.py:663 msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "" +msgstr "DPI resolution عند جارٍ الإنشاء صورة ملفات إلى supply إلى ملصق الطباعة إضافات" #: common/setting/system.py:669 msgid "Enable Reports" -msgstr "" +msgstr "تفعيل تقارير" #: common/setting/system.py:670 msgid "Enable generation of reports" -msgstr "" +msgstr "تفعيل generation لـ تقارير" #: common/setting/system.py:675 msgid "Debug Mode" -msgstr "" +msgstr "تصحيح الأخطاء وضع" #: common/setting/system.py:676 msgid "Generate reports in debug mode (HTML output)" -msgstr "" +msgstr "إنشاء تقارير في تصحيح الأخطاء وضع (HTML مخرج)" #: common/setting/system.py:681 msgid "Report URL Fetching" -msgstr "" +msgstr "تقرير URL جارٍ الجلب" #: common/setting/system.py:682 msgid "Allow fetching of remote URLs when generating reports" -msgstr "" +msgstr "السماح جارٍ الجلب لـ بعيد URLs عند جارٍ الإنشاء تقارير" #: common/setting/system.py:687 msgid "Log Report Errors" -msgstr "" +msgstr "سجل تقرير أخطاء" #: common/setting/system.py:688 msgid "Log errors which occur when generating reports" -msgstr "" +msgstr "سجل أخطاء الذي occur عند جارٍ الإنشاء تقارير" #: common/setting/system.py:693 plugin/builtin/labels/label_sheet.py:30 #: report/models.py:391 msgid "Page Size" -msgstr "" +msgstr "صفحة حجم" #: common/setting/system.py:694 msgid "Default page size for PDF reports" -msgstr "" +msgstr "افتراضي صفحة حجم لـ PDF تقارير" #: common/setting/system.py:699 msgid "Enforce Parameter Units" -msgstr "" +msgstr "Enforce معلمة وحدات" #: common/setting/system.py:701 msgid "If units are provided, parameter values must match the specified units" -msgstr "" +msgstr "إذا وحدات هي مقدم، معلمة قيم يجب مطابقة ال محدد وحدات" #: common/setting/system.py:707 msgid "Globally Unique Serials" -msgstr "" +msgstr "Globally فريد Serials" #: common/setting/system.py:708 msgid "Serial numbers for stock items must be globally unique" -msgstr "" +msgstr "يجب أن يكون الأرقام التسلسلية لـ عناصر المخزون globally فريد" #: common/setting/system.py:713 msgid "Delete Depleted Stock" -msgstr "" +msgstr "حذف نافد مخزون" #: common/setting/system.py:714 msgid "Determines default behavior when a stock item is depleted" -msgstr "" +msgstr "Determines افتراضي behavior عند عنصر المخزون هو نافد" #: common/setting/system.py:719 msgid "Allow Edit Serial Number" -msgstr "" +msgstr "السماح تعديل الرقم التسلسلي" #: common/setting/system.py:720 msgid "Allow editing of serial number for stock items" -msgstr "" +msgstr "السماح تحرير لـ الرقم التسلسلي لـ عناصر المخزون" #: common/setting/system.py:725 msgid "Delete Serialized Stock" -msgstr "" +msgstr "حذف مسلسل مخزون" #: common/setting/system.py:726 msgid "Allow deletion of stock items which have a serial number" -msgstr "" +msgstr "السماح الحذف لـ عناصر المخزون الذي لديه الرقم التسلسلي" #: common/setting/system.py:731 msgid "Batch Code Template" -msgstr "" +msgstr "رمز الدفعة قالب" #: common/setting/system.py:732 msgid "Template for generating default batch codes for stock items" -msgstr "" +msgstr "قالب لـ جارٍ الإنشاء افتراضي دفعة رموز لـ عناصر المخزون" #: common/setting/system.py:736 msgid "Stock Expiry" -msgstr "" +msgstr "مخزون انتهاء" #: common/setting/system.py:737 msgid "Enable stock expiry functionality" -msgstr "" +msgstr "تفعيل مخزون انتهاء الوظيفة" #: common/setting/system.py:742 msgid "Sell Expired Stock" -msgstr "" +msgstr "Sell منتهي مخزون" #: common/setting/system.py:743 msgid "Allow sale of expired stock" -msgstr "" +msgstr "السماح بيع لـ منتهي مخزون" #: common/setting/system.py:748 msgid "Stock Stale Time" -msgstr "" +msgstr "مخزون قديم وقت" #: common/setting/system.py:750 msgid "Number of days stock items are considered stale before expiring" -msgstr "" +msgstr "عدد أيام عناصر المخزون هي considered قديم قبل expiring" #: common/setting/system.py:757 msgid "Build Expired Stock" -msgstr "" +msgstr "إنتاج منتهي مخزون" #: common/setting/system.py:758 msgid "Allow building with expired stock" -msgstr "" +msgstr "السماح building مع منتهي مخزون" #: common/setting/system.py:763 msgid "Stock Ownership Control" -msgstr "" +msgstr "مخزون Ownership Control" #: common/setting/system.py:764 msgid "Enable ownership control over stock locations and items" -msgstr "" +msgstr "تفعيل ownership control over مواقع المخزون و عناصر" #: common/setting/system.py:769 msgid "Stock Location Default Icon" -msgstr "" +msgstr "موقع المخزون افتراضي أيقونة" #: common/setting/system.py:770 msgid "Stock location default icon (empty means no icon)" -msgstr "" +msgstr "موقع المخزون افتراضي أيقونة (فارغ means لا أيقونة)" #: common/setting/system.py:775 msgid "Show Installed Stock Items" -msgstr "" +msgstr "عرض مثبت عناصر المخزون" #: common/setting/system.py:776 msgid "Display installed stock items in stock tables" -msgstr "" +msgstr "عرض مثبت عناصر المخزون في مخزون tables" #: common/setting/system.py:781 msgid "Check BOM when installing items" -msgstr "" +msgstr "فحص BOM عند installing عناصر" #: common/setting/system.py:783 msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "" +msgstr "مثبت عناصر المخزون يجب موجود في ال BOM لـ ال الأصل صنف" #: common/setting/system.py:789 msgid "Allow Out of Stock Transfer" -msgstr "" +msgstr "السماح خارج لـ مخزون تحويل" #: common/setting/system.py:791 msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "" +msgstr "السماح عناصر المخزون الذي هي غير في مخزون إلى يكون منقول بين مواقع المخزون" #: common/setting/system.py:797 msgid "Merge stock with existing stock on transfer by default" -msgstr "" +msgstr "دمج مخزون مع موجود مخزون على تحويل حسب افتراضي" #: common/setting/system.py:799 msgid "Default state for merge stock on transfer behaviour. (Can be changed per transfer if desired)" -msgstr "" +msgstr "افتراضي حالة لـ دمج مخزون على تحويل behaviour. (يمكن يكون تم التغيير per تحويل إذا desired)" #: common/setting/system.py:805 msgid "Build Order Reference Pattern" -msgstr "" +msgstr "أمر الإنتاج مرجع نمط" #: common/setting/system.py:806 msgid "Required pattern for generating Build Order reference field" -msgstr "" +msgstr "مطلوب نمط لـ جارٍ الإنشاء أمر الإنتاج مرجع حقل" #: common/setting/system.py:811 common/setting/system.py:879 #: common/setting/system.py:899 common/setting/system.py:949 #: common/setting/system.py:971 msgid "Require Responsible Owner" -msgstr "" +msgstr "طلب مسؤول مالك" #: common/setting/system.py:812 common/setting/system.py:880 #: common/setting/system.py:900 common/setting/system.py:950 #: common/setting/system.py:972 msgid "A responsible owner must be assigned to each order" -msgstr "" +msgstr "يجب أن يكون مسؤول مالك مسند إلى كل طلب" #: common/setting/system.py:817 msgid "Require Active Part" -msgstr "" +msgstr "طلب نشط صنف" #: common/setting/system.py:818 msgid "Prevent build order creation for inactive parts" -msgstr "" +msgstr "منع أمر الإنتاج إنشاء لـ غير نشط أصناف" #: common/setting/system.py:823 msgid "Require Locked Part" -msgstr "" +msgstr "طلب مقفل صنف" #: common/setting/system.py:824 msgid "Prevent build order creation for unlocked parts" -msgstr "" +msgstr "منع أمر الإنتاج إنشاء لـ غير مقفل أصناف" #: common/setting/system.py:829 msgid "Require Valid BOM" -msgstr "" +msgstr "طلب صالح BOM" #: common/setting/system.py:830 msgid "Prevent build order creation unless BOM has been validated" -msgstr "" +msgstr "منع أمر الإنتاج إنشاء unless BOM لديه تم تم التحقق" #: common/setting/system.py:835 msgid "Require Closed Child Orders" -msgstr "" +msgstr "طلب Closed فرعي طلبات" #: common/setting/system.py:837 msgid "Prevent build order completion until all child orders are closed" -msgstr "" +msgstr "منع أمر الإنتاج إكمال حتى الكل فرعي طلبات هي closed" #: common/setting/system.py:843 msgid "External Build Orders" -msgstr "" +msgstr "خارجي أوامر الإنتاج" #: common/setting/system.py:844 msgid "Enable external build order functionality" -msgstr "" +msgstr "تفعيل خارجي أمر الإنتاج الوظيفة" #: common/setting/system.py:849 msgid "Require External Build Orders" -msgstr "" +msgstr "طلب خارجي أوامر الإنتاج" #: common/setting/system.py:851 msgid "Require an external build order when ordering assembled parts from an external supplier" -msgstr "" +msgstr "طلب خارجي أمر الإنتاج عند ordering مجمّع أصناف من خارجي مورد" #: common/setting/system.py:857 msgid "Block Until Tests Pass" -msgstr "" +msgstr "Block حتى اختبارات نجاح" #: common/setting/system.py:859 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" +msgstr "منع إنتاج مخرجات من being مكتمل حتى الكل مطلوب اختبارات نجاح" #: common/setting/system.py:865 msgid "Enable Return Orders" -msgstr "" +msgstr "تفعيل طلبات الإرجاع" #: common/setting/system.py:866 msgid "Enable return order functionality in the user interface" -msgstr "" +msgstr "تفعيل طلب الإرجاع الوظيفة في ال مستخدم واجهة" #: common/setting/system.py:871 msgid "Return Order Reference Pattern" -msgstr "" +msgstr "طلب الإرجاع مرجع نمط" #: common/setting/system.py:873 msgid "Required pattern for generating Return Order reference field" -msgstr "" +msgstr "مطلوب نمط لـ جارٍ الإنشاء طلب الإرجاع مرجع حقل" #: common/setting/system.py:885 msgid "Edit Completed Return Orders" -msgstr "" +msgstr "تعديل مكتمل طلبات الإرجاع" #: common/setting/system.py:887 msgid "Allow editing of return orders after they have been completed" -msgstr "" +msgstr "السماح تحرير لـ طلبات الإرجاع بعد they لديه تم مكتمل" #: common/setting/system.py:893 msgid "Sales Order Reference Pattern" -msgstr "" +msgstr "طلب البيع مرجع نمط" #: common/setting/system.py:894 msgid "Required pattern for generating Sales Order reference field" -msgstr "" +msgstr "مطلوب نمط لـ جارٍ الإنشاء طلب البيع مرجع حقل" #: common/setting/system.py:905 msgid "Sales Order Default Shipment" -msgstr "" +msgstr "طلب البيع افتراضي شحنة" #: common/setting/system.py:906 msgid "Enable creation of default shipment with sales orders" -msgstr "" +msgstr "تفعيل إنشاء لـ افتراضي شحنة مع طلبات البيع" #: common/setting/system.py:911 msgid "Edit Completed Sales Orders" -msgstr "" +msgstr "تعديل مكتمل طلبات البيع" #: common/setting/system.py:913 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "" +msgstr "السماح تحرير لـ طلبات البيع بعد they لديه تم مشحون أو مكتمل" #: common/setting/system.py:919 msgid "Shipment Requires Checking" -msgstr "" +msgstr "شحنة يتطلب Checking" #: common/setting/system.py:921 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "منع إكمال لـ شحنات حتى عناصر لديه تم محدد" #: common/setting/system.py:927 msgid "Mark Shipped Orders as Complete" -msgstr "" +msgstr "تعيين مشحون طلبات بصفته مكتمل" #: common/setting/system.py:929 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" +msgstr "حالة طلبات البيع معلّم بصفته مشحون سوف تلقائيًا يكون مكتمل، bypassing ال \"shipped\"" #: common/setting/system.py:935 msgid "Enable Transfer Orders" -msgstr "" +msgstr "تفعيل طلبات التحويل" #: common/setting/system.py:936 msgid "Enable transfer order functionality in the user interface" -msgstr "" +msgstr "تفعيل طلب التحويل الوظيفة في ال مستخدم واجهة" #: common/setting/system.py:941 msgid "Transfer Order Reference Pattern" -msgstr "" +msgstr "طلب التحويل مرجع نمط" #: common/setting/system.py:943 msgid "Required pattern for generating Transfer Order reference field" -msgstr "" +msgstr "مطلوب نمط لـ جارٍ الإنشاء طلب التحويل مرجع حقل" #: common/setting/system.py:955 msgid "Block Incomplete Item Tests" -msgstr "" +msgstr "Block غير مكتمل عنصر اختبارات" #: common/setting/system.py:957 msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" -msgstr "" +msgstr "منع تخصيص لـ عناصر المخزون إلى طلبات البيع إذا مطلوب عنصر اختبارات هي غير مكتمل" #: common/setting/system.py:963 msgid "Purchase Order Reference Pattern" -msgstr "" +msgstr "طلب الشراء مرجع نمط" #: common/setting/system.py:965 msgid "Required pattern for generating Purchase Order reference field" -msgstr "" +msgstr "مطلوب نمط لـ جارٍ الإنشاء طلب الشراء مرجع حقل" #: common/setting/system.py:977 msgid "Edit Completed Purchase Orders" -msgstr "" +msgstr "تعديل مكتمل طلبات الشراء" #: common/setting/system.py:979 msgid "Allow editing of purchase orders after they have been shipped or completed" -msgstr "" +msgstr "السماح تحرير لـ طلبات الشراء بعد they لديه تم مشحون أو مكتمل" #: common/setting/system.py:985 msgid "Convert Currency" -msgstr "" +msgstr "تحويل عملة" #: common/setting/system.py:986 msgid "Convert item value to base currency when receiving stock" -msgstr "" +msgstr "تحويل عنصر قيمة إلى أساس عملة عند receiving مخزون" #: common/setting/system.py:991 msgid "Auto Complete Purchase Orders" -msgstr "" +msgstr "تلقائي مكتمل طلبات الشراء" #: common/setting/system.py:993 msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "" +msgstr "تلقائيًا تعيين طلبات الشراء بصفته مكتمل عند الكل البنود هي مستلم" #: common/setting/system.py:1000 msgid "Enable password forgot" -msgstr "" +msgstr "تفعيل كلمة المرور forgot" #: common/setting/system.py:1001 msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "تفعيل كلمة المرور forgot دالة على ال تسجيل الدخول pages" #: common/setting/system.py:1006 msgid "Enable registration" -msgstr "" +msgstr "تفعيل تسجيل" #: common/setting/system.py:1007 msgid "Enable self-registration for users on the login pages" -msgstr "" +msgstr "تفعيل self-registration لـ مستخدمون على ال تسجيل الدخول pages" #: common/setting/system.py:1012 msgid "Enable SSO" -msgstr "" +msgstr "تفعيل SSO" #: common/setting/system.py:1013 msgid "Enable SSO on the login pages" -msgstr "" +msgstr "تفعيل SSO على ال تسجيل الدخول pages" #: common/setting/system.py:1018 msgid "Enable SSO registration" -msgstr "" +msgstr "تفعيل SSO تسجيل" #: common/setting/system.py:1020 msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" +msgstr "تفعيل self-registration عبر SSO لـ مستخدمون على ال تسجيل الدخول pages" #: common/setting/system.py:1026 msgid "Enable SSO group sync" -msgstr "" +msgstr "تفعيل SSO مجموعة مزامنة" #: common/setting/system.py:1028 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" +msgstr "تفعيل synchronizing InvenTree مجموعات مع مجموعات مقدم حسب ال IdP" #: common/setting/system.py:1034 msgid "SSO group key" -msgstr "" +msgstr "SSO مجموعة مفتاح" #: common/setting/system.py:1035 msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" +msgstr "ال اسم لـ ال مجموعات claim attribute مقدم حسب ال IdP" #: common/setting/system.py:1040 msgid "SSO group map" -msgstr "" +msgstr "SSO مجموعة map" #: common/setting/system.py:1042 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." -msgstr "" +msgstr "mapping من SSO مجموعات إلى محلي InvenTree مجموعات. إذا ال محلي مجموعة يقوم غير موجود، هو سوف يكون تم الإنشاء." #: common/setting/system.py:1048 msgid "Remove groups outside of SSO" -msgstr "" +msgstr "إزالة مجموعات outside لـ SSO" #: common/setting/system.py:1050 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 "Whether مجموعات مسند إلى ال مستخدم ينبغي يكون تمت الإزالة إذا they هي غير backend حسب ال IdP. Disabling هذا إعداد might cause security issues" #: common/setting/system.py:1056 msgid "Email required" -msgstr "" +msgstr "بريد إلكتروني مطلوب" #: common/setting/system.py:1057 msgid "Require user to supply mail on signup" -msgstr "" +msgstr "طلب مستخدم إلى supply بريد على signup" #: common/setting/system.py:1062 msgid "Auto-fill SSO users" -msgstr "" +msgstr "Auto-fill SSO مستخدمون" #: common/setting/system.py:1063 msgid "Automatically fill out user-details from SSO account-data" -msgstr "" +msgstr "تلقائيًا fill خارج user-details من SSO account-data" #: common/setting/system.py:1068 msgid "Mail twice" -msgstr "" +msgstr "بريد twice" #: common/setting/system.py:1069 msgid "On signup ask users twice for their mail" -msgstr "" +msgstr "على signup ask مستخدمون twice لـ الخاص بهم بريد" #: common/setting/system.py:1074 msgid "Password twice" -msgstr "" +msgstr "كلمة المرور twice" #: common/setting/system.py:1075 msgid "On signup ask users twice for their password" -msgstr "" +msgstr "على signup ask مستخدمون twice لـ الخاص بهم كلمة المرور" #: common/setting/system.py:1080 msgid "Allowed domains" -msgstr "" +msgstr "مسموح domains" #: common/setting/system.py:1082 msgid "Restrict signup to certain domains (comma-separated, starting with @)" -msgstr "" +msgstr "Restrict signup إلى certain domains (comma-separated، starting مع @)" #: common/setting/system.py:1088 msgid "Group on signup" -msgstr "" +msgstr "مجموعة على signup" #: common/setting/system.py:1090 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:1096 msgid "Enforce MFA" @@ -3603,171 +3639,171 @@ msgstr "" #: common/setting/system.py:1097 msgid "Users must use multifactor security." -msgstr "" +msgstr "مستخدمون يجب استخدام multifactor security." #: common/setting/system.py:1102 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." -msgstr "" +msgstr "Enabling هذا إعداد سوف طلب الكل مستخدمون إلى تعيين أعلى multifactor مصادقة. الكل sessions سوف يكون disconnected immediately." #: common/setting/system.py:1107 msgid "Check plugins on startup" -msgstr "" +msgstr "فحص إضافات على startup" #: common/setting/system.py:1109 msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" +msgstr "فحص ذلك الكل إضافات هي مثبت على startup - تفعيل في container environments" #: common/setting/system.py:1116 msgid "Check for plugin updates" -msgstr "" +msgstr "فحص لـ إضافة updates" #: common/setting/system.py:1117 msgid "Enable periodic checks for updates to installed plugins" -msgstr "" +msgstr "تفعيل periodic checks لـ updates إلى مثبت إضافات" #: common/setting/system.py:1123 msgid "Enable URL integration" -msgstr "" +msgstr "تفعيل URL تكامل" #: common/setting/system.py:1124 msgid "Enable plugins to add URL routes" -msgstr "" +msgstr "تفعيل إضافات إلى إضافة URL routes" #: common/setting/system.py:1130 msgid "Enable navigation integration" -msgstr "" +msgstr "تفعيل تنقل تكامل" #: common/setting/system.py:1131 msgid "Enable plugins to integrate into navigation" -msgstr "" +msgstr "تفعيل إضافات إلى integrate إلى تنقل" #: common/setting/system.py:1137 msgid "Enable app integration" -msgstr "" +msgstr "تفعيل تطبيق تكامل" #: common/setting/system.py:1138 msgid "Enable plugins to add apps" -msgstr "" +msgstr "تفعيل إضافات إلى إضافة apps" #: common/setting/system.py:1144 msgid "Enable schedule integration" -msgstr "" +msgstr "تفعيل schedule تكامل" #: common/setting/system.py:1145 msgid "Enable plugins to run scheduled tasks" -msgstr "" +msgstr "تفعيل إضافات إلى run مجدول مهام" #: common/setting/system.py:1151 msgid "Enable event integration" -msgstr "" +msgstr "تفعيل event تكامل" #: common/setting/system.py:1152 msgid "Enable plugins to respond to internal events" -msgstr "" +msgstr "تفعيل إضافات إلى respond إلى داخلي events" #: common/setting/system.py:1158 msgid "Enable interface integration" -msgstr "" +msgstr "تفعيل واجهة تكامل" #: common/setting/system.py:1159 msgid "Enable plugins to integrate into the user interface" -msgstr "" +msgstr "تفعيل إضافات إلى integrate إلى ال مستخدم واجهة" #: common/setting/system.py:1165 msgid "Enable mail integration" -msgstr "" +msgstr "تفعيل بريد تكامل" #: common/setting/system.py:1166 msgid "Enable plugins to process outgoing/incoming mails" -msgstr "" +msgstr "تفعيل إضافات إلى عملية صادر/وارد mails" #: common/setting/system.py:1172 msgid "Enable project codes" -msgstr "" +msgstr "تفعيل مشروع رموز" #: common/setting/system.py:1173 msgid "Enable project codes for tracking projects" -msgstr "" +msgstr "تفعيل مشروع رموز لـ تتبع مشاريع" #: common/setting/system.py:1178 msgid "Enable Stocktake" -msgstr "" +msgstr "تفعيل جرد المخزون" #: common/setting/system.py:1180 msgid "Enable functionality for recording historical stock levels and value" -msgstr "" +msgstr "تفعيل الوظيفة لـ recording تاريخي مخزون levels و قيمة" #: common/setting/system.py:1186 msgid "Exclude External Locations" -msgstr "" +msgstr "استبعاد خارجي مواقع" #: common/setting/system.py:1188 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "استبعاد عناصر المخزون في خارجي مواقع من جرد المخزون حسابات" #: common/setting/system.py:1194 msgid "Automatic Stocktake Period" -msgstr "" +msgstr "تلقائي جرد المخزون Period" #: common/setting/system.py:1195 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "عدد أيام بين تلقائي جرد المخزون recording" #: common/setting/system.py:1201 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "حذف Old جرد المخزون سجلات" #: common/setting/system.py:1203 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" +msgstr "حذف جرد المخزون سجلات older من ال محدد رقم لـ أيام" #: common/setting/system.py:1209 msgid "Stocktake Deletion Interval" -msgstr "" +msgstr "جرد المخزون الحذف فاصل" #: common/setting/system.py:1211 msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "جرد المخزون سجلات سوف يكون تم الحذف بعد محدد رقم لـ أيام" #: common/setting/system.py:1218 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "حذف Old مخزون تتبع سجلات" #: common/setting/system.py:1220 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" +msgstr "حذف مخزون تتبع سجلات older من ال محدد رقم لـ أيام" #: common/setting/system.py:1226 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "مخزون تتبع الحذف فاصل" #: common/setting/system.py:1228 msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "مخزون تتبع سجلات سوف يكون تم الحذف بعد محدد رقم لـ أيام" #: common/setting/system.py:1235 msgid "Display Users full names" -msgstr "" +msgstr "عرض مستخدمون كامل names" #: common/setting/system.py:1236 msgid "Display Users full names instead of usernames" -msgstr "" +msgstr "عرض مستخدمون كامل names بدلًا من لـ usernames" #: common/setting/system.py:1241 msgid "Display User Profiles" -msgstr "" +msgstr "عرض مستخدم ملفات شخصية" #: common/setting/system.py:1242 msgid "Display Users Profiles on their profile page" -msgstr "" +msgstr "عرض مستخدمون ملفات شخصية على الخاص بهم ملف شخصي صفحة" #: common/setting/system.py:1247 msgid "Week Starts On" -msgstr "" +msgstr "Week Starts على" #: common/setting/system.py:1248 msgid "Starting day of the week, for display in calendar views" -msgstr "" +msgstr "Starting day لـ ال week، لـ عرض في تقويم views" #: common/setting/system.py:1251 msgid "Sunday" @@ -3799,11 +3835,11 @@ msgstr "" #: common/setting/system.py:1261 msgid "Calendar Horizon" -msgstr "" +msgstr "تقويم Horizon" #: common/setting/system.py:1263 msgid "Number of months into the future to display in calendar views" -msgstr "" +msgstr "عدد months إلى ال future إلى عرض في تقويم views" #: common/setting/system.py:1267 msgid "months" @@ -3811,227 +3847,227 @@ msgstr "" #: common/setting/system.py:1270 msgid "Enable Test Station Data" -msgstr "" +msgstr "تفعيل اختبار Station بيانات" #: common/setting/system.py:1271 msgid "Enable test station data collection for test results" -msgstr "" +msgstr "تفعيل اختبار station بيانات collection لـ اختبار نتائج" #: common/setting/system.py:1276 msgid "Enable Machine Ping" -msgstr "" +msgstr "تفعيل آلة Ping" #: common/setting/system.py:1278 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "تفعيل حالة periodic ping مهمة لـ مسجل آلات إلى فحص الخاص بهم" #: common/setting/user.py:23 msgid "Inline label display" -msgstr "" +msgstr "Inline ملصق عرض" #: common/setting/user.py:25 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" +msgstr "عرض PDF ملصقات في ال متصفح، بدلًا من لـ downloading بصفته ملف" #: 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 "Configure الذي ملصق طابعة ينبغي يكون محدد حسب افتراضي" #: common/setting/user.py:37 msgid "Inline report display" -msgstr "" +msgstr "Inline تقرير عرض" #: common/setting/user.py:39 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" +msgstr "عرض PDF تقارير في ال متصفح، بدلًا من لـ downloading بصفته ملف" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "باركود ماسح في Form حقول" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "السماح باركود ماسح إدخال في form حقول" #: 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 "Excluded غير نشط أصناف من بحث معاينة نافذة" #: 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 "عدد نتائج إلى عرض في كل section لـ ال بحث معاينة نافذة" #: common/setting/user.py:163 msgid "Regex Search" -msgstr "" +msgstr "تعبير نمطي بحث" #: common/setting/user.py:164 msgid "Enable regular expressions in search queries" -msgstr "" +msgstr "تفعيل regular expressions في بحث queries" #: common/setting/user.py:169 msgid "Whole Word Search" -msgstr "" +msgstr "Whole Word بحث" #: common/setting/user.py:170 msgid "Search queries return results for whole word matches" -msgstr "" +msgstr "بحث queries إرجاع نتائج لـ whole word matches" #: 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 "بحث queries إرجاع نتائج لـ matches من ال item's ملاحظات" #: common/setting/user.py:183 msgid "Escape Key Closes Forms" -msgstr "" +msgstr "Escape مفتاح Closes Forms" #: common/setting/user.py:184 msgid "Use the escape key to close modal forms" -msgstr "" +msgstr "استخدام ال escape مفتاح إلى إغلاق modal forms" #: common/setting/user.py:189 msgid "Fixed Navbar" @@ -4039,207 +4075,207 @@ msgstr "" #: common/setting/user.py:190 msgid "The navbar position is fixed to the top of the screen" -msgstr "" +msgstr "ال navbar position هو fixed إلى ال أعلى لـ ال شاشة" #: common/setting/user.py:195 msgid "Fixed Table Headers" -msgstr "" +msgstr "Fixed جدول Headers" #: common/setting/user.py:196 msgid "Table headers are fixed to the top of the table" -msgstr "" +msgstr "جدول headers هي fixed إلى ال أعلى لـ ال جدول" #: common/setting/user.py:201 msgid "Show Spotlight" -msgstr "" +msgstr "عرض Spotlight" #: common/setting/user.py:202 msgid "Enable spotlight navigation functionality" -msgstr "" +msgstr "تفعيل spotlight تنقل الوظيفة" #: common/setting/user.py:207 msgid "Navigation Icons" -msgstr "" +msgstr "تنقل Icons" #: common/setting/user.py:208 msgid "Display icons in the navigation bar" -msgstr "" +msgstr "عرض icons في ال تنقل bar" #: common/setting/user.py:213 msgid "Date Format" -msgstr "" +msgstr "تاريخ تنسيق" #: common/setting/user.py:214 msgid "Preferred format for displaying dates" -msgstr "" +msgstr "Preferred تنسيق لـ displaying تواريخ" #: 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 "عرض آخر Breadcrumb" #: common/setting/user.py:234 msgid "Show the current page in breadcrumbs" -msgstr "" +msgstr "عرض ال حالي صفحة في breadcrumbs" #: common/setting/user.py:239 msgid "Show Extra Model Information" -msgstr "" +msgstr "عرض إضافي نموذج معلومات" #: common/setting/user.py:240 msgid "Display extra information in model selection dropdowns" -msgstr "" +msgstr "عرض إضافي معلومات في نموذج اختيار dropdowns" #: common/setting/user.py:245 msgid "Show full stock location in tables" -msgstr "" +msgstr "عرض كامل موقع المخزون في tables" #: common/setting/user.py:247 msgid "Disabled: The full location path is displayed as a hover tooltip. Enabled: The full location path is displayed as plain text." -msgstr "" +msgstr "معطّل: ال كامل موقع مسار هو معروض بصفته hover tooltip. مفعّل: ال كامل موقع مسار هو معروض بصفته plain نص." #: common/setting/user.py:253 msgid "Show full part categories in tables" -msgstr "" +msgstr "عرض كامل فئات الأصناف في tables" #: common/setting/user.py:255 msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled: The full category path is displayed as plain text." -msgstr "" +msgstr "معطّل: ال كامل فئة مسار هو معروض بصفته hover tooltip. مفعّل: ال كامل فئة مسار هو معروض بصفته plain نص." #: common/setting/user.py:261 msgid "Show Subassemblies in BOM table" -msgstr "" +msgstr "عرض Subassemblies في BOM جدول" #: common/setting/user.py:262 msgid "Enable display of subassemblies in the BOM table" -msgstr "" +msgstr "تفعيل عرض لـ subassemblies في ال BOM جدول" #: common/setting/user.py:267 msgid "Receive error reports" -msgstr "" +msgstr "استلام خطأ تقارير" #: common/setting/user.py:268 msgid "Receive notifications for system errors" -msgstr "" +msgstr "استلام إشعارات لـ نظام أخطاء" #: common/setting/user.py:273 msgid "Last used printing machines" -msgstr "" +msgstr "آخر مستخدم الطباعة آلات" #: common/setting/user.py:274 msgid "Save the last used printing machines for a user" -msgstr "" +msgstr "حفظ ال آخر مستخدم الطباعة آلات لـ مستخدم" #: common/setting/user.py:278 msgid "Display Items at Final Level" -msgstr "" +msgstr "عرض عناصر عند Final مستوى" #: common/setting/user.py:280 msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" -msgstr "" +msgstr "تلقائيًا افتراضي إلى showing عناصر/أصناف بدلًا من لـ sub-levels لـ مواقع أو فئات مع لا children" #: common/validators.py:40 msgid "All models" -msgstr "" +msgstr "الكل نماذج" #: common/validators.py:65 msgid "No attachment model type provided" -msgstr "" +msgstr "لا مرفق نموذج نوع مقدم" #: common/validators.py:71 msgid "Invalid attachment model type" -msgstr "" +msgstr "غير صالح مرفق نموذج نوع" #: common/validators.py:87 #, python-brace-format msgid "File size exceeds maximum upload limit of {max_size} MB" -msgstr "" +msgstr "ملف حجم يتجاوز أقصى رفع حد لـ {max_size} MB" #: common/validators.py:93 msgid "Invalid file name" -msgstr "" +msgstr "غير صالح ملف اسم" #: common/validators.py:127 msgid "Minimum places cannot be greater than maximum places" -msgstr "" +msgstr "أدنى أماكن لا يمكن يكون أكبر من أقصى أماكن" #: common/validators.py:139 msgid "Maximum places cannot be less than minimum places" -msgstr "" +msgstr "أقصى أماكن لا يمكن يكون أقل من أدنى أماكن" #: common/validators.py:150 msgid "An empty domain is not allowed." -msgstr "" +msgstr "فارغ domain هو غير مسموح." #: common/validators.py:152 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" +msgstr "غير صالح domain اسم: {domain}" #: common/validators.py:168 msgid "Value must be uppercase" -msgstr "" +msgstr "يجب أن يكون القيمة uppercase" #: common/validators.py:174 msgid "Value must be a valid variable identifier" -msgstr "" +msgstr "يجب أن يكون القيمة صالح variable معرف" #: company/api.py:148 msgid "Part is Active" -msgstr "" +msgstr "صنف هو نشط" #: company/api.py:152 msgid "Manufacturer is Active" -msgstr "" +msgstr "شركة مصنعة هو نشط" #: company/api.py:261 msgid "Supplier Part is Active" -msgstr "" +msgstr "صنف المورد هو نشط" #: company/api.py:263 msgid "Primary Supplier Part" -msgstr "" +msgstr "أساسي صنف المورد" #: company/api.py:267 msgid "Internal Part is Active" -msgstr "" +msgstr "داخلي صنف هو نشط" #: company/api.py:272 msgid "Supplier is Active" -msgstr "" +msgstr "مورد هو نشط" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" -msgstr "" +msgstr "الشركة المصنعة" #: company/api.py:291 company/models.py:124 company/models.py:404 #: stock/api.py:924 msgid "Company" -msgstr "" +msgstr "الشركة" #: company/api.py:301 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" @@ -4247,64 +4283,64 @@ msgstr "" #: company/models.py:161 msgid "Company website URL" -msgstr "" +msgstr "شركة website 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:565 #: users/models.py:557 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 "تنفيذ أنت sell عناصر إلى هذا شركة؟" #: 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 "يقوم هذا شركة manufacture أصناف؟" #: company/models.py:220 msgid "Default currency used for this company" -msgstr "" +msgstr "افتراضي عملة مستخدم لـ هذا شركة" #: company/models.py:227 msgid "Tax ID" @@ -4312,11 +4348,11 @@ msgstr "" #: company/models.py:228 msgid "Company Tax ID" -msgstr "" +msgstr "شركة Tax ID" #: company/models.py:350 order/models.py:575 order/models.py:2566 msgid "Address" -msgstr "" +msgstr "العنوان" #: company/models.py:351 msgid "Addresses" @@ -4324,43 +4360,43 @@ 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 "عنوان describing ال عنوان سجل" #: 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 "Postal رمز" #: company/models.py:444 msgid "City/Region" @@ -4368,15 +4404,15 @@ msgstr "" #: company/models.py:445 msgid "Postal code city/region" -msgstr "" +msgstr "Postal رمز city/region" #: company/models.py:451 msgid "State/Province" -msgstr "" +msgstr "حالة/Province" #: company/models.py:452 msgid "State or province" -msgstr "" +msgstr "حالة أو province" #: company/models.py:458 msgid "Country" @@ -4384,219 +4420,219 @@ msgstr "" #: company/models.py:459 msgid "Address country" -msgstr "" +msgstr "عنوان country" #: company/models.py:465 msgid "Courier shipping notes" -msgstr "" +msgstr "Courier شحن ملاحظات" #: company/models.py:466 msgid "Notes for shipping courier" -msgstr "" +msgstr "ملاحظات لـ شحن courier" #: 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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" -msgstr "" +msgstr "صنف الشركة المصنعة" #: company/models.py:525 company/models.py:761 stock/models.py:1077 #: stock/serializers.py:423 msgid "Base Part" -msgstr "" +msgstr "أساس صنف" #: company/models.py:527 company/models.py:763 msgid "Select part" -msgstr "" +msgstr "تحديد صنف" #: company/models.py:537 msgid "Select manufacturer" -msgstr "" +msgstr "تحديد شركة مصنعة" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" #: company/models.py:544 stock/serializers.py:581 msgid "Manufacturer Part Number" -msgstr "" +msgstr "صنف الشركة المصنعة رقم" #: company/models.py:551 msgid "URL for external manufacturer part link" -msgstr "" +msgstr "URL لـ خارجي صنف الشركة المصنعة رابط" #: company/models.py:560 msgid "Manufacturer part description" -msgstr "" +msgstr "صنف الشركة المصنعة وصف" #: company/models.py:688 msgid "Pack units must be compatible with the base part units" -msgstr "" +msgstr "يجب أن يكون حزمة وحدات compatible مع ال أساس صنف وحدات" #: company/models.py:695 msgid "Pack units must be greater than zero" -msgstr "" +msgstr "يجب أن يكون حزمة وحدات أكبر من صفر" #: company/models.py:709 msgid "Linked manufacturer part must reference the same base part" -msgstr "" +msgstr "مرتبط صنف الشركة المصنعة يجب مرجع ال نفس أساس صنف" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 msgid "Supplier" -msgstr "" +msgstr "المورد" #: company/models.py:772 msgid "Select supplier" -msgstr "" +msgstr "تحديد مورد" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" -msgstr "" +msgstr "مورد مخزون keeping وحدة" #: company/models.py:784 msgid "Is this supplier part active?" -msgstr "" +msgstr "هو هذا صنف المورد نشط؟" #: company/models.py:789 msgid "Primary" -msgstr "" +msgstr "أساسي" #: company/models.py:790 msgid "Is this the primary supplier part for the linked Part?" -msgstr "" +msgstr "هو هذا ال أساسي صنف المورد لـ ال مرتبط صنف؟" #: company/models.py:800 msgid "Select manufacturer part" -msgstr "" +msgstr "تحديد صنف الشركة المصنعة" #: company/models.py:807 msgid "URL for external supplier part link" -msgstr "" +msgstr "URL لـ خارجي صنف المورد رابط" #: company/models.py:816 msgid "Supplier part description" -msgstr "" +msgstr "صنف المورد وصف" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" -msgstr "" +msgstr "أساس تكلفة" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "أدنى charge (e.g. stocking fee)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" -msgstr "" +msgstr "تعبئة" #: company/models.py:841 msgid "Part packaging" -msgstr "" +msgstr "صنف تعبئة" #: company/models.py:846 msgid "Pack Quantity" -msgstr "" +msgstr "كمية حزمة" #: company/models.py:848 msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" +msgstr "إجمالي كمية مورد في مفرد حزمة. ترك فارغ لـ مفرد عناصر." -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" -msgstr "" +msgstr "متعدد" #: company/models.py:868 msgid "Order multiple" -msgstr "" +msgstr "طلب متعدد" #: company/models.py:880 msgid "Quantity available from supplier" -msgstr "" +msgstr "كمية متاح من مورد" #: company/models.py:886 msgid "Availability Updated" -msgstr "" +msgstr "Availability تم التحديث" #: company/models.py:887 msgid "Date of last update of availability data" -msgstr "" +msgstr "تاريخ لـ آخر تحديث لـ availability بيانات" #: company/models.py:1015 msgid "Supplier Price Break" -msgstr "" +msgstr "مورد سعر فاصل" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" -msgstr "" +msgstr "افتراضي عملة مستخدم لـ هذا مورد" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" -msgstr "" +msgstr "شركة اسم" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" -msgstr "" +msgstr "متوفر في المخزون" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" -msgstr "" +msgstr "سعر فواصل" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" -msgstr "" +msgstr "Pretty اسم" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" -msgstr "" +msgstr "خطأ في حدث during بيانات تصدير" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" -msgstr "" +msgstr "بيانات تصدير إضافة مرتجع incorrect بيانات تنسيق" #: 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 "Additional حالة معلومات لـ هذا عنصر" #: 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" @@ -4604,7 +4640,7 @@ msgstr "" #: generic/states/serializers.py:40 msgid "Values" -msgstr "" +msgstr "قيم" #: generic/states/tests.py:22 order/status_codes.py:13 msgid "Placed" @@ -4612,59 +4648,59 @@ msgstr "" #: generic/states/validators.py:21 msgid "Invalid status code" -msgstr "" +msgstr "غير صالح حالة رمز" #: importer/models.py:75 msgid "Data File" -msgstr "" +msgstr "بيانات ملف" #: importer/models.py:76 msgid "Data file to import" -msgstr "" +msgstr "بيانات ملف إلى استيراد" #: importer/models.py:85 msgid "Columns" -msgstr "" +msgstr "أعمدة" #: importer/models.py:92 msgid "Target model type for this import session" -msgstr "" +msgstr "هدف نموذج نوع لـ هذا استيراد جلسة" #: importer/models.py:98 msgid "Import status" -msgstr "" +msgstr "حالة استيراد" #: importer/models.py:108 msgid "Field Defaults" -msgstr "" +msgstr "حقل Defaults" #: importer/models.py:115 msgid "Field Overrides" -msgstr "" +msgstr "حقل Overrides" #: importer/models.py:122 msgid "Field Filters" -msgstr "" +msgstr "حقل مرشحات" #: importer/models.py:128 msgid "Update Existing Records" -msgstr "" +msgstr "تحديث موجود سجلات" #: importer/models.py:129 msgid "If enabled, existing records will be updated with new data" -msgstr "" +msgstr "إذا مفعّل، موجود سجلات سوف يكون تم التحديث مع جديد بيانات" #: importer/models.py:312 msgid "Some required fields have not been mapped" -msgstr "" +msgstr "Some مطلوب حقول لديه غير تم mapped" #: importer/models.py:414 msgid "Completed Row Count History" -msgstr "" +msgstr "مكتمل صف عد سجل" #: importer/models.py:417 msgid "Row Count History" -msgstr "" +msgstr "صف عد سجل" #: importer/models.py:440 msgid "ID" @@ -4672,140 +4708,140 @@ msgstr "" #: importer/models.py:441 msgid "Existing database identifier for the record" -msgstr "" +msgstr "موجود قاعدة بيانات معرف لـ ال سجل" #: importer/models.py:516 msgid "Column is already mapped to a database field" -msgstr "" +msgstr "عمود هو بالفعل mapped إلى قاعدة بيانات حقل" #: importer/models.py:521 msgid "Field is already mapped to a data column" -msgstr "" +msgstr "حقل هو بالفعل mapped إلى بيانات عمود" #: importer/models.py:530 msgid "Column mapping must be linked to a valid import session" -msgstr "" +msgstr "يجب أن يكون عمود mapping مرتبط إلى صالح استيراد جلسة" #: importer/models.py:535 msgid "Column does not exist in the data file" -msgstr "" +msgstr "عمود يقوم غير موجود في ال بيانات ملف" #: importer/models.py:542 msgid "Field does not exist in the target model" -msgstr "" +msgstr "حقل يقوم غير موجود في ال هدف نموذج" #: importer/models.py:546 msgid "Selected field is read-only" -msgstr "" +msgstr "محدد حقل هو read-only" #: importer/models.py:552 msgid "Lookup field can only be set for related (foreign-key) fields" -msgstr "" +msgstr "بحث حقل يمكن فقط يكون تعيين لـ مرتبط (foreign-key) حقول" #: importer/models.py:560 #, python-brace-format msgid "Invalid lookup field. Valid options are: {options}" -msgstr "" +msgstr "غير صالح بحث حقل. صالح خيارات هي: {options}" #: importer/models.py:567 importer/models.py:654 msgid "Import Session" -msgstr "" +msgstr "استيراد جلسة" #: importer/models.py:571 msgid "Field" -msgstr "" +msgstr "حقل" #: importer/models.py:573 msgid "Column" -msgstr "" +msgstr "عمود" #: importer/models.py:579 msgid "Lookup Field" -msgstr "" +msgstr "بحث حقل" #: importer/models.py:581 msgid "Database field to use for foreign-key lookup. Leave blank for automatic lookup." -msgstr "" +msgstr "قاعدة بيانات حقل إلى استخدام لـ foreign-key بحث. ترك فارغ لـ تلقائي بحث." #: importer/models.py:658 msgid "Row Index" -msgstr "" +msgstr "صف Index" #: importer/models.py:661 msgid "Original row data" -msgstr "" +msgstr "أصلي صف بيانات" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" -msgstr "" +msgstr "أخطاء" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" -msgstr "" +msgstr "صالح" #: importer/models.py:905 msgid "Multiple matches found for value - please ensure the value is unique, or select a specific lookup field" -msgstr "" +msgstr "متعدد matches تم العثور لـ قيمة - يرجى ensure ال قيمة هو فريد، أو تحديد specific بحث حقل" #: importer/models.py:966 msgid "ID is required for updating existing records." -msgstr "" +msgstr "ID هو مطلوب لـ جارٍ التحديث موجود سجلات." #: importer/models.py:973 msgid "No record found with the provided ID" -msgstr "" +msgstr "لا سجل تم العثور مع ال مقدم ID" #: importer/models.py:979 msgid "Invalid ID format provided" -msgstr "" +msgstr "غير صالح ID تنسيق مقدم" #: importer/operations.py:31 importer/operations.py:52 msgid "Unsupported data file format" -msgstr "" +msgstr "Unsupported بيانات ملف تنسيق" #: importer/operations.py:43 msgid "Failed to open data file" -msgstr "" +msgstr "فشل في فتح بيانات ملف" #: importer/operations.py:54 msgid "Invalid data file dimensions" -msgstr "" +msgstr "غير صالح بيانات ملف dimensions" #: importer/serializers.py:102 msgid "Invalid field defaults" -msgstr "" +msgstr "غير صالح حقل defaults" #: importer/serializers.py:115 msgid "Invalid field overrides" -msgstr "" +msgstr "غير صالح حقل overrides" #: importer/serializers.py:128 msgid "Invalid field filters" -msgstr "" +msgstr "غير صالح حقل مرشحات" #: importer/serializers.py:187 msgid "Rows" -msgstr "" +msgstr "صفوف" #: importer/serializers.py:188 msgid "List of row IDs to accept" -msgstr "" +msgstr "قائمة لـ صف IDs إلى قبول" #: importer/serializers.py:201 msgid "No rows provided" -msgstr "" +msgstr "لا صفوف مقدم" #: importer/serializers.py:205 msgid "Row does not belong to this session" -msgstr "" +msgstr "صف يقوم غير belong إلى هذا جلسة" #: importer/serializers.py:208 msgid "Row contains invalid data" -msgstr "" +msgstr "صف يحتوي غير صالح بيانات" #: importer/serializers.py:211 msgid "Row has already been completed" -msgstr "" +msgstr "صف لديه بالفعل تم مكتمل" #: importer/status_codes.py:13 msgid "Initializing" @@ -4813,35 +4849,35 @@ msgstr "" #: importer/status_codes.py:18 msgid "Mapping Columns" -msgstr "" +msgstr "Mapping أعمدة" #: importer/status_codes.py:21 msgid "Importing Data" -msgstr "" +msgstr "Importing بيانات" #: importer/status_codes.py:24 msgid "Processing Data" -msgstr "" +msgstr "Processing بيانات" #: 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 "بيانات ملف يحتوي لا headers" #: importer/validators.py:29 msgid "Data file contains too many columns" -msgstr "" +msgstr "بيانات ملف يحتوي أيضًا many أعمدة" #: importer/validators.py:32 msgid "Data file contains too many rows" -msgstr "" +msgstr "بيانات ملف يحتوي أيضًا many صفوف" #: importer/validators.py:53 msgid "Value must be a valid dictionary object" -msgstr "" +msgstr "يجب أن يكون القيمة صالح dictionary كائن" #: machine/machine_types/label_printer.py:212 msgid "Copies" @@ -4849,7 +4885,7 @@ msgstr "" #: machine/machine_types/label_printer.py:213 msgid "Number of copies to print for each label" -msgstr "" +msgstr "عدد copies إلى طباعة لـ كل ملصق" #: machine/machine_types/label_printer.py:231 msgid "Connected" @@ -4857,19 +4893,19 @@ msgstr "" #: machine/machine_types/label_printer.py:232 order/api.py:2423 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 "لا media" #: machine/machine_types/label_printer.py:236 msgid "Paper jam" @@ -4881,99 +4917,99 @@ 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 "Directly طباعة ملصقات لـ various عناصر." #: 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 "Scope ال طابعة إلى specific موقع" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" -msgstr "" +msgstr "اسم لـ آلة" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" -msgstr "" +msgstr "آلة نوع" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" -msgstr "" +msgstr "نوع لـ آلة" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" -msgstr "" +msgstr "برنامج تشغيل" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" -msgstr "" +msgstr "برنامج تشغيل مستخدم لـ ال آلة" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" -msgstr "" +msgstr "آلات يمكن يكون معطّل" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" -msgstr "" +msgstr "برنامج تشغيل متاح" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" -msgstr "" +msgstr "لا أخطاء" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" -msgstr "" +msgstr "حالة آلة" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" -msgstr "" +msgstr "آلة" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" -msgstr "" +msgstr "آلة Config" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" -msgstr "" +msgstr "Config نوع" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "مفتاح لـ ال property" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "قيمة لـ ال property" #: machine/serializers.py:30 users/models.py:234 msgid "Group" -msgstr "" +msgstr "مجموعة" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "Grouping لـ ال property" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "نوع" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "نوع لـ ال property" #: machine/serializers.py:40 msgid "Max Progress" @@ -4981,117 +5017,117 @@ msgstr "" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "أقصى قيمة لـ progress نوع، مطلوب إذا type=progress" #: order/api.py:132 msgid "Order Reference" -msgstr "" +msgstr "طلب مرجع" #: order/api.py:160 order/api.py:1268 order/api.py:2060 msgid "Outstanding" -msgstr "" +msgstr "متبقي" #: order/api.py:176 msgid "Has Project Code" -msgstr "" +msgstr "لديه مشروع رمز" #: order/api.py:190 order/models.py:533 msgid "Created By" -msgstr "" +msgstr "تم الإنشاء حسب" #: order/api.py:194 msgid "Created Before" -msgstr "" +msgstr "تم الإنشاء قبل" #: order/api.py:198 msgid "Created After" -msgstr "" +msgstr "تم الإنشاء بعد" #: order/api.py:202 msgid "Has Start Date" -msgstr "" +msgstr "تاريخ لديه بدء" #: order/api.py:210 msgid "Start Date Before" -msgstr "" +msgstr "بدء تاريخ قبل" #: order/api.py:214 msgid "Start Date After" -msgstr "" +msgstr "بدء تاريخ بعد" #: order/api.py:218 msgid "Has Target Date" -msgstr "" +msgstr "تاريخ لديه هدف" #: order/api.py:226 msgid "Target Date Before" -msgstr "" +msgstr "التاريخ المستهدف قبل" #: order/api.py:230 msgid "Target Date After" -msgstr "" +msgstr "التاريخ المستهدف بعد" #: order/api.py:234 msgid "Updated Before" -msgstr "" +msgstr "تم التحديث قبل" #: order/api.py:238 msgid "Updated After" -msgstr "" +msgstr "تم التحديث بعد" #: order/api.py:291 msgid "Has Pricing" -msgstr "" +msgstr "لديه التسعير" #: order/api.py:344 order/api.py:831 order/api.py:1587 order/api.py:1878 msgid "Completed Before" -msgstr "" +msgstr "مكتمل قبل" #: order/api.py:348 order/api.py:835 order/api.py:1591 order/api.py:1882 msgid "Completed After" -msgstr "" +msgstr "مكتمل بعد" #: order/api.py:354 order/api.py:358 msgid "External Build Order" -msgstr "" +msgstr "خارجي أمر الإنتاج" #: order/api.py:543 order/api.py:931 order/api.py:1231 order/api.py:2023 #: order/api.py:2182 order/models.py:2197 order/models.py:2323 #: order/models.py:2375 order/models.py:2557 order/models.py:2753 #: order/models.py:3283 order/models.py:3349 order/models.py:3757 msgid "Order" -msgstr "" +msgstr "الطلب" #: order/api.py:547 order/api.py:999 order/api.py:2250 msgid "Order Complete" -msgstr "" +msgstr "طلب مكتمل" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" -msgstr "" +msgstr "داخلي صنف" #: order/api.py:601 msgid "Order Pending" -msgstr "" +msgstr "طلب قيد الانتظار" #: order/api.py:984 order/api.py:2235 msgid "Completed" -msgstr "" +msgstr "مكتمل" #: order/api.py:1284 msgid "Has Shipment" -msgstr "" +msgstr "لديه شحنة" #: order/api.py:1502 msgid "Shipment not found" -msgstr "" +msgstr "شحنة غير تم العثور" #: order/api.py:2415 order/models.py:632 order/models.py:2198 #: order/models.py:2324 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:130 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" -msgstr "" +msgstr "طلب شراء" #: order/api.py:2417 order/models.py:1366 order/models.py:2376 #: order/models.py:2558 order/models.py:2754 @@ -5100,526 +5136,526 @@ 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:2419 order/models.py:2925 order/models.py:3284 #: order/models.py:3350 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" -msgstr "" +msgstr "طلب إرجاع" #: order/api.py:2421 order/models.py:3372 order/models.py:3758 #: report/templates/report/inventree_transfer_order_report.html:12 msgid "Transfer Order" -msgstr "" +msgstr "طلب تحويل" #: order/models.py:97 #: 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:98 msgid "Total price for this order" -msgstr "" +msgstr "إجمالي سعر لـ هذا طلب" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" -msgstr "" +msgstr "طلب عملة" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" -msgstr "" +msgstr "عملة لـ هذا طلب (ترك فارغ إلى استخدام شركة افتراضي)" #: order/models.py:355 msgid "This order is locked and cannot be modified" -msgstr "" +msgstr "هذا طلب هو مقفل و لا يمكن يكون modified" #: order/models.py:414 msgid "Contact does not match selected company" -msgstr "" +msgstr "جهة اتصال يقوم غير مطابقة محدد شركة" #: order/models.py:421 msgid "Start date must be before target date" -msgstr "" +msgstr "يجب أن يكون تاريخ بدء تاريخ قبل هدف" #: order/models.py:432 msgid "Address does not match selected company" -msgstr "" +msgstr "عنوان يقوم غير مطابقة محدد شركة" #: order/models.py:488 msgid "Order description (optional)" -msgstr "" +msgstr "طلب وصف (اختياري)" #: order/models.py:497 order/models.py:2065 msgid "Select project code for this order" -msgstr "" +msgstr "تحديد مشروع رمز لـ هذا طلب" #: order/models.py:503 order/models.py:2046 order/models.py:2622 msgid "Link to external page" -msgstr "" +msgstr "رابط إلى خارجي صفحة" #: order/models.py:510 msgid "Start date" -msgstr "" +msgstr "تاريخ بدء" #: order/models.py:511 msgid "Scheduled start date for this order" -msgstr "" +msgstr "مجدول بدء تاريخ لـ هذا طلب" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" -msgstr "" +msgstr "التاريخ المستهدف" #: order/models.py:519 msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" +msgstr "Expected تاريخ لـ طلب تسليم. طلب سوف يكون متأخر بعد هذا تاريخ." #: order/models.py:539 msgid "Issue Date" -msgstr "" +msgstr "تاريخ صرف" #: order/models.py:540 msgid "Date order was issued" -msgstr "" +msgstr "تاريخ طلب كان مصروف" #: order/models.py:546 msgid "Updated At" -msgstr "" +msgstr "تم التحديث عند" #: order/models.py:555 msgid "User or group responsible for this order" -msgstr "" +msgstr "مستخدم أو مجموعة مسؤول لـ هذا طلب" #: order/models.py:566 msgid "Point of contact for this order" -msgstr "" +msgstr "نقطة لـ جهة اتصال لـ هذا طلب" #: order/models.py:576 msgid "Company address for this order" -msgstr "" +msgstr "شركة عنوان لـ هذا طلب" #: order/models.py:698 order/models.py:1430 msgid "Order reference" -msgstr "" +msgstr "طلب مرجع" #: order/models.py:707 order/models.py:1454 order/models.py:3016 #: order/models.py:3449 stock/serializers.py:1020 users/models.py:538 msgid "Status" -msgstr "" +msgstr "الحالة" #: order/models.py:708 msgid "Purchase order status" -msgstr "" +msgstr "حالة طلب الشراء" #: order/models.py:718 msgid "Company from which the items are being ordered" -msgstr "" +msgstr "شركة من الذي ال عناصر هي being ordered" #: order/models.py:729 msgid "Supplier Reference" -msgstr "" +msgstr "مورد مرجع" #: order/models.py:730 msgid "Supplier order reference code" -msgstr "" +msgstr "مورد طلب مرجع رمز" #: order/models.py:739 msgid "received by" -msgstr "" +msgstr "مستلم حسب" #: order/models.py:746 order/models.py:3031 order/models.py:3490 msgid "Date order was completed" -msgstr "" +msgstr "تاريخ طلب كان مكتمل" #: order/models.py:755 order/models.py:2256 msgid "Destination" -msgstr "" +msgstr "الوجهة" #: order/models.py:756 order/models.py:2260 msgid "Destination for received items" -msgstr "" +msgstr "الوجهة لـ مستلم عناصر" #: order/models.py:802 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "صنف مورد يجب مطابقة PO مورد" #: order/models.py:1072 msgid "Line item does not match purchase order" -msgstr "" +msgstr "بند يقوم غير مطابقة طلب الشراء" #: order/models.py:1075 msgid "Line item is missing a linked part" -msgstr "" +msgstr "بند هو مفقود مرتبط صنف" #: order/models.py:1089 msgid "Quantity must be a positive number" -msgstr "" +msgstr "يجب أن يكون الكمية موجب رقم" #: order/models.py:1123 msgid "Serial numbers cannot be assigned to virtual parts" -msgstr "" +msgstr "الأرقام التسلسلية لا يمكن يكون مسند إلى افتراضي أصناف" #: order/models.py:1347 msgid "Allow any stock (serialized or unserialized)" -msgstr "" +msgstr "السماح أي مخزون (مسلسل أو unserialized)" #: order/models.py:1348 msgid "Serialized stock only" -msgstr "" +msgstr "مسلسل مخزون فقط" #: order/models.py:1349 msgid "Unserialized stock only" -msgstr "" +msgstr "Unserialized مخزون فقط" #: order/models.py:1441 order/models.py:3003 stock/models.py:1130 #: stock/models.py:1131 stock/serializers.py:1437 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" -msgstr "" +msgstr "العميل" #: order/models.py:1442 msgid "Company to which the items are being sold" -msgstr "" +msgstr "شركة إلى الذي ال عناصر هي being sold" #: order/models.py:1455 msgid "Sales order status" -msgstr "" +msgstr "حالة طلب البيع" #: order/models.py:1461 order/models.py:3023 msgid "Customer Reference " -msgstr "" +msgstr "عميل مرجع" #: order/models.py:1462 order/models.py:3024 msgid "Customer order reference code" -msgstr "" +msgstr "عميل طلب مرجع رمز" #: order/models.py:1466 order/models.py:2574 msgid "Shipment Date" -msgstr "" +msgstr "تاريخ شحنة" #: order/models.py:1475 msgid "shipped by" -msgstr "" +msgstr "مشحون حسب" #: order/models.py:1650 order/models.py:3533 msgid "Order is already complete" -msgstr "" +msgstr "طلب هو بالفعل مكتمل" #: order/models.py:1653 order/models.py:3536 msgid "Order is already cancelled" -msgstr "" +msgstr "طلب هو بالفعل ملغى" #: order/models.py:1657 msgid "Only an open order can be marked as complete" -msgstr "" +msgstr "فقط فتح طلب يمكن يكون معلّم بصفته مكتمل" #: order/models.py:1661 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" +msgstr "طلب لا يمكن يكون مكتمل بصفته هناك هي غير مكتمل شحنات" #: order/models.py:1666 msgid "Order cannot be completed as there are incomplete allocations" -msgstr "" +msgstr "طلب لا يمكن يكون مكتمل بصفته هناك هي غير مكتمل تخصيصات" #: order/models.py:1675 msgid "Order cannot be completed as there are incomplete line items" -msgstr "" +msgstr "طلب لا يمكن يكون مكتمل بصفته هناك هي غير مكتمل البنود" #: order/models.py:1972 order/models.py:1997 msgid "The order is locked and cannot be modified" -msgstr "" +msgstr "ال طلب هو مقفل و لا يمكن يكون modified" #: order/models.py:2005 msgid "Item quantity" -msgstr "" +msgstr "كمية عنصر" #: order/models.py:2023 msgid "Line Number" -msgstr "" +msgstr "سطر رقم" #: order/models.py:2024 msgid "Line number for this item (optional)" -msgstr "" +msgstr "سطر رقم لـ هذا عنصر (اختياري)" #: order/models.py:2033 msgid "Line item reference" -msgstr "" +msgstr "بند مرجع" #: order/models.py:2040 msgid "Line item notes" -msgstr "" +msgstr "بند ملاحظات" #: order/models.py:2055 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" +msgstr "التاريخ المستهدف لـ هذا بند (ترك فارغ إلى استخدام ال التاريخ المستهدف من ال طلب)" #: order/models.py:2085 msgid "Line item description (optional)" -msgstr "" +msgstr "بند وصف (اختياري)" #: order/models.py:2092 msgid "Additional context for this line" -msgstr "" +msgstr "Additional سياق لـ هذا سطر" #: order/models.py:2102 msgid "Unit price" -msgstr "" +msgstr "سعر الوحدة" #: order/models.py:2121 msgid "Purchase Order Line Item" -msgstr "" +msgstr "طلب الشراء بند" #: order/models.py:2150 msgid "Supplier part must match supplier" -msgstr "" +msgstr "صنف المورد يجب مطابقة مورد" #: order/models.py:2158 msgid "Build order must be marked as external" -msgstr "" +msgstr "يجب أن يكون أمر الإنتاج معلّم بصفته خارجي" #: order/models.py:2165 msgid "Build orders can only be linked to assembly parts" -msgstr "" +msgstr "أوامر الإنتاج يمكن فقط يكون مرتبط إلى تجميع أصناف" #: order/models.py:2171 msgid "Build order part must match line item part" -msgstr "" +msgstr "أمر الإنتاج صنف يجب مطابقة بند صنف" #: order/models.py:2181 msgid "An external build order is required for assembly parts" -msgstr "" +msgstr "خارجي أمر الإنتاج هو مطلوب لـ تجميع أصناف" #: order/models.py:2217 msgid "Supplier part" -msgstr "" +msgstr "صنف المورد" #: order/models.py:2224 msgid "Received" -msgstr "" +msgstr "مستلم" #: order/models.py:2225 msgid "Number of items received" -msgstr "" +msgstr "عدد عناصر مستلم" #: order/models.py:2233 stock/models.py:1260 stock/serializers.py:669 msgid "Purchase Price" -msgstr "" +msgstr "سعر الشراء" #: order/models.py:2234 msgid "Unit purchase price" -msgstr "" +msgstr "وحدة سعر الشراء" #: order/models.py:2250 msgid "External Build Order to be fulfilled by this line item" -msgstr "" +msgstr "خارجي أمر الإنتاج إلى يكون fulfilled حسب هذا بند" #: order/models.py:2312 msgid "Purchase Order Extra Line" -msgstr "" +msgstr "طلب الشراء إضافي سطر" #: order/models.py:2341 msgid "Sales Order Line Item" -msgstr "" +msgstr "طلب البيع بند" #: order/models.py:2368 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "فقط قابل للبيع أصناف يمكن يكون مسند إلى طلب البيع" #: order/models.py:2394 msgid "Sale Price" -msgstr "" +msgstr "سعر البيع" #: order/models.py:2395 msgid "Unit sale price" -msgstr "" +msgstr "وحدة سعر البيع" #: order/models.py:2404 order/status_codes.py:50 msgid "Shipped" -msgstr "" +msgstr "مشحون" #: order/models.py:2405 msgid "Shipped quantity" -msgstr "" +msgstr "كمية مشحون" #: order/models.py:2518 msgid "Sales Order Shipment" -msgstr "" +msgstr "طلب البيع شحنة" #: order/models.py:2531 msgid "Shipment address must match the customer" -msgstr "" +msgstr "شحنة عنوان يجب مطابقة ال عميل" #: order/models.py:2567 msgid "Shipping address for this shipment" -msgstr "" +msgstr "شحن عنوان لـ هذا شحنة" #: order/models.py:2575 msgid "Date of shipment" -msgstr "" +msgstr "تاريخ لـ شحنة" #: order/models.py:2581 msgid "Delivery Date" -msgstr "" +msgstr "تاريخ تسليم" #: order/models.py:2582 msgid "Date of delivery of shipment" -msgstr "" +msgstr "تاريخ لـ تسليم لـ شحنة" #: order/models.py:2590 msgid "Checked By" -msgstr "" +msgstr "محدد حسب" #: order/models.py:2591 msgid "User who checked this shipment" -msgstr "" +msgstr "مستخدم من محدد هذا شحنة" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" -msgstr "" +msgstr "شحنة" #: order/models.py:2599 msgid "Shipment number" -msgstr "" +msgstr "شحنة رقم" #: order/models.py:2607 msgid "Tracking Number" -msgstr "" +msgstr "تتبع رقم" #: order/models.py:2608 msgid "Shipment tracking information" -msgstr "" +msgstr "شحنة تتبع معلومات" #: order/models.py:2615 msgid "Invoice Number" -msgstr "" +msgstr "Invoice رقم" #: order/models.py:2616 msgid "Reference number for associated invoice" -msgstr "" +msgstr "مرجع رقم لـ مرتبط invoice" #: order/models.py:2662 msgid "Shipment has already been sent" -msgstr "" +msgstr "شحنة لديه بالفعل تم تم الإرسال" #: order/models.py:2665 msgid "Shipment has no allocated stock items" -msgstr "" +msgstr "شحنة لديه لا مخصص عناصر المخزون" #: order/models.py:2672 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "يجب أن يكون شحنة محدد قبل هو يمكن يكون مكتمل" #: order/models.py:2742 msgid "Sales Order Extra Line" -msgstr "" +msgstr "طلب البيع إضافي سطر" #: order/models.py:2771 msgid "Sales Order Allocation" -msgstr "" +msgstr "طلب البيع تخصيص" #: order/models.py:2794 order/models.py:2796 order/models.py:3850 #: order/models.py:3852 msgid "Stock item has not been assigned" -msgstr "" +msgstr "عنصر المخزون لديه غير تم مسند" #: order/models.py:2803 order/models.py:3859 msgid "Cannot allocate stock item to a line with a different part" -msgstr "" +msgstr "لا يمكن تخصيص عنصر المخزون إلى سطر مع مختلف صنف" #: order/models.py:2806 order/models.py:3862 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "لا يمكن تخصيص مخزون إلى سطر بدون صنف" #: order/models.py:2809 order/models.py:3865 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" +msgstr "كمية تخصيص كمية لا يمكن تجاوز مخزون" #: order/models.py:2825 order/models.py:3881 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "يجب أن يكون كمية تخصيص أكبر من صفر" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" -msgstr "" +msgstr "يجب أن يكون الكمية 1 لـ مسلسل عنصر المخزون" #: order/models.py:2831 msgid "Sales order does not match shipment" -msgstr "" +msgstr "طلب البيع يقوم غير مطابقة شحنة" #: order/models.py:2832 plugin/base/barcodes/api.py:713 msgid "Shipment does not match sales order" -msgstr "" +msgstr "شحنة يقوم غير مطابقة طلب البيع" #: order/models.py:2840 order/models.py:3892 msgid "Line" -msgstr "" +msgstr "سطر" #: order/models.py:2851 msgid "Sales order shipment reference" -msgstr "" +msgstr "طلب البيع شحنة مرجع" #: order/models.py:2864 order/models.py:3291 order/models.py:3905 msgid "Item" -msgstr "" +msgstr "عنصر" #: order/models.py:2865 order/models.py:3906 msgid "Select stock item to allocate" -msgstr "" +msgstr "تحديد عنصر المخزون إلى تخصيص" #: order/models.py:2874 order/models.py:3915 msgid "Enter stock allocation quantity" -msgstr "" +msgstr "كمية إدخال مخزون تخصيص" #: order/models.py:2992 msgid "Return Order reference" -msgstr "" +msgstr "طلب الإرجاع مرجع" #: order/models.py:3004 msgid "Company from which items are being returned" -msgstr "" +msgstr "شركة من الذي عناصر هي being مرتجع" #: order/models.py:3017 msgid "Return order status" -msgstr "" +msgstr "حالة طلب الإرجاع" #: order/models.py:3249 msgid "Return Order Line Item" -msgstr "" +msgstr "طلب الإرجاع بند" #: order/models.py:3262 msgid "Stock item must be specified" -msgstr "" +msgstr "يجب أن يكون عنصر المخزون محدد" #: order/models.py:3266 msgid "Return quantity exceeds stock quantity" -msgstr "" +msgstr "كمية إرجاع كمية يتجاوز مخزون" #: order/models.py:3271 msgid "Return quantity must be greater than zero" -msgstr "" +msgstr "يجب أن يكون كمية إرجاع أكبر من صفر" #: order/models.py:3276 msgid "Invalid quantity for serialized stock item" -msgstr "" +msgstr "غير صالح كمية لـ مسلسل عنصر المخزون" #: order/models.py:3292 msgid "Select item to return from customer" -msgstr "" +msgstr "تحديد عنصر إلى إرجاع من عميل" #: order/models.py:3307 msgid "Received Date" -msgstr "" +msgstr "تاريخ مستلم" #: order/models.py:3308 msgid "The date this return item was received" -msgstr "" +msgstr "ال تاريخ هذا إرجاع عنصر كان مستلم" #: order/models.py:3320 msgid "Outcome" @@ -5627,387 +5663,343 @@ msgstr "" #: order/models.py:3321 msgid "Outcome for this line item" -msgstr "" +msgstr "Outcome لـ هذا بند" #: order/models.py:3328 msgid "Cost associated with return or repair for this line item" -msgstr "" +msgstr "تكلفة مرتبط مع إرجاع أو repair لـ هذا بند" #: order/models.py:3338 msgid "Return Order Extra Line" -msgstr "" +msgstr "طلب الإرجاع إضافي سطر" #: order/models.py:3439 msgid "Transfer Order Reference" -msgstr "" +msgstr "طلب التحويل مرجع" #: order/models.py:3450 msgid "Transfer order status" -msgstr "" +msgstr "حالة طلب التحويل" #: order/models.py:3465 msgid "Source for transferred items" -msgstr "" +msgstr "المصدر لـ منقول عناصر" #: order/models.py:3475 msgid "Destination for transferred items" -msgstr "" +msgstr "الوجهة لـ منقول عناصر" #: order/models.py:3480 msgid "Consume Stock" -msgstr "" +msgstr "استهلاك مخزون" #: order/models.py:3482 msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item" -msgstr "" +msgstr "Rather من تحويل ال مخزون إلى ال الوجهة، \"consume\" هو، حسب removing منقول كمية من ال مخصص عنصر المخزون" #: order/models.py:3540 msgid "Order cannot be completed until a destination location is set" -msgstr "" +msgstr "طلب لا يمكن يكون مكتمل حتى الوجهة موقع هو تعيين" #: order/models.py:3545 msgid "Order cannot be completed until it is fully allocated" -msgstr "" +msgstr "طلب لا يمكن يكون مكتمل حتى هو هو بالكامل مخصص" #: order/models.py:3739 msgid "Transfer Order Line Item" -msgstr "" +msgstr "طلب التحويل بند" #: order/models.py:3772 msgid "transferred" -msgstr "" +msgstr "منقول" #: order/models.py:3773 msgid "transferred quantity" -msgstr "" +msgstr "كمية منقول" #: order/models.py:3827 msgid "Transfer Order Allocation" -msgstr "" +msgstr "طلب التحويل تخصيص" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 #: report/templates/report/inventree_transfer_order_report.html:20 msgid "Line Items" -msgstr "" +msgstr "بنود" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" -msgstr "" +msgstr "مكتمل سطور" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" -msgstr "" +msgstr "مخصص حالة مفتاح" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" -msgstr "" +msgstr "تحديث طلب حالة إلى مخصص قيمة لـ هذا منطقي قيمة" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" -msgstr "" +msgstr "يجب أن يكون مخصص حالة مفتاح عدد صحيح" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" -msgstr "" +msgstr "غير صالح مخصص حالة مفتاح" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" -msgstr "" +msgstr "حالة غير صالح مخصص حالة مفتاح لـ هذا طلب" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" -msgstr "" +msgstr "مورد اسم" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" -msgstr "" +msgstr "طلب لا يمكن يكون ملغى" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" -msgstr "" +msgstr "السماح طلب إلى يكون closed مع غير مكتمل البنود" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" -msgstr "" +msgstr "طلب لديه غير مكتمل البنود" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" -msgstr "" +msgstr "طلب هو غير فتح" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" -msgstr "" +msgstr "تلقائي التسعير" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" +msgstr "تلقائيًا calculate سعر الشراء استنادًا إلى على صنف المورد بيانات" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" -msgstr "" +msgstr "سعر الشراء عملة" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" -msgstr "" +msgstr "دمج عناصر" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" +msgstr "دمج عناصر مع ال نفس صنف، الوجهة و التاريخ المستهدف إلى واحد بند" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" -msgstr "" +msgstr "داخلي صنف رقم" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" -msgstr "" +msgstr "داخلي صنف اسم" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" -msgstr "" +msgstr "يجب أن يكون صنف المورد محدد" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" -msgstr "" +msgstr "يجب أن يكون طلب الشراء محدد" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" -msgstr "" +msgstr "مورد يجب مطابقة طلب الشراء" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" -msgstr "" +msgstr "طلب الشراء يجب مطابقة مورد" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" -msgstr "" +msgstr "بند" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" -msgstr "" +msgstr "تحديد الوجهة موقع لـ مستلم عناصر" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "إدخال رمز الدفعة لـ وارد عناصر المخزون" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" -msgstr "" +msgstr "تاريخ الانتهاء" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" -msgstr "" +msgstr "إدخال انتهاء تاريخ لـ وارد عناصر المخزون" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" -msgstr "" +msgstr "إدخال الأرقام التسلسلية لـ وارد عناصر المخزون" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" -msgstr "" +msgstr "تجاوز تعبئة معلومات لـ وارد عناصر المخزون" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" -msgstr "" +msgstr "Additional ملاحظة لـ وارد عناصر المخزون" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" -msgstr "" +msgstr "الباركود" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" -msgstr "" +msgstr "تم المسح باركود" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" -msgstr "" +msgstr "باركود هو بالفعل في استخدام" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" -msgstr "" +msgstr "يجب أن يكون البنود مقدم" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" -msgstr "" +msgstr "يجب أن يكون الوجهة موقع محدد" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" -msgstr "" +msgstr "يجب أن يكون مورد باركود قيم فريد" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" -msgstr "" +msgstr "شحنات" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" -msgstr "" +msgstr "مكتمل شحنات" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" -msgstr "" +msgstr "مخصص سطور" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" -msgstr "" +msgstr "سعر البيع عملة" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" -msgstr "" +msgstr "مخصص عناصر" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" -msgstr "" +msgstr "لا شحنة تفاصيل مقدم" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" -msgstr "" +msgstr "بند هو غير مرتبط مع هذا طلب" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" -msgstr "" +msgstr "يجب أن يكون الكمية موجب" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" -msgstr "" +msgstr "عنصر المخزون لديه غير نجح الكل مطلوب اختبارات" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" -msgstr "" +msgstr "إدخال الأرقام التسلسلية إلى تخصيص" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" -msgstr "" +msgstr "شحنة لديه بالفعل تم مشحون" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" -msgstr "" +msgstr "شحنة هو غير مرتبط مع هذا طلب" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" -msgstr "" +msgstr "لا مطابقة تم العثور لـ ال التالي الأرقام التسلسلية" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" -msgstr "" +msgstr "ال التالي الأرقام التسلسلية هي غير متاح" + +#: order/serializers.py:2053 +msgid "Stock location where items are sourced (leave blank to use any location)" +msgstr "موقع المخزون حيث عناصر هي sourced (ترك فارغ إلى استخدام أي موقع)" #: order/serializers.py:2063 -msgid "Stock location where items are sourced (leave blank to use any location)" -msgstr "" - -#: order/serializers.py:2073 msgid "Exclude stock items from this location" -msgstr "" +msgstr "استبعاد عناصر المخزون من هذا موقع" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" -msgstr "" +msgstr "إسناد تخصيصات إلى هذا شحنة" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" -msgstr "" +msgstr "السماح مخزون إلى يكون taken من متعدد مواقع إلى fulfil مفرد بند" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" -msgstr "" +msgstr "مسلسل مخزون" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" -msgstr "" +msgstr "Control whether مسلسل عناصر المخزون هي included في auto-allocation" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" -msgstr "" +msgstr "حد تخصيص إلى هذه البنود (ترك فارغ إلى تخصيص الكل سطور)" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" -msgstr "" +msgstr "بند يقوم غير belong إلى هذا طلب" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" -msgstr "" +msgstr "طلب الإرجاع بند" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" -msgstr "" +msgstr "بند يقوم غير مطابقة طلب الإرجاع" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" -msgstr "" +msgstr "بند لديه بالفعل تم مستلم" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" -msgstr "" +msgstr "عناصر يمكن فقط يكون مستلم مقابل طلبات الذي هي في progress" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" -msgstr "" +msgstr "كمية إلى إرجاع" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" -msgstr "" +msgstr "سطر سعر عملة" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" -msgstr "" +msgstr "السماح طلب إلى مكتمل مع غير مكتمل تخصيصات" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" -msgstr "" +msgstr "طلب لديه غير مكتمل تخصيصات" #: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16 msgid "Lost" @@ -6015,15 +6007,15 @@ 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:80 msgid "In Progress" -msgstr "" +msgstr "في Progress" #: order/status_codes.py:106 msgid "Return" -msgstr "" +msgstr "إرجاع" #: order/status_codes.py:109 msgid "Repair" @@ -6039,47 +6031,47 @@ msgstr "" #: order/status_codes.py:118 msgid "Reject" -msgstr "" +msgstr "رفض" #: order/status_codes.py:126 #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" -msgstr "" +msgstr "مصروف" #: order/tasks.py:49 msgid "Overdue Purchase Order" -msgstr "" +msgstr "متأخر طلب الشراء" #: order/tasks.py:54 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "" +msgstr "طلب الشراء {po} هو الآن متأخر" #: order/tasks.py:119 msgid "Overdue Sales Order" -msgstr "" +msgstr "متأخر طلب البيع" #: order/tasks.py:124 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "" +msgstr "طلب البيع {so} هو الآن متأخر" #: order/tasks.py:186 msgid "Overdue Return Order" -msgstr "" +msgstr "متأخر طلب الإرجاع" #: order/tasks.py:191 #, python-brace-format msgid "Return order {ro} is now overdue" -msgstr "" +msgstr "طلب الإرجاع {ro} هو الآن متأخر" #: part/api.py:90 msgid "Starred" -msgstr "" +msgstr "مفضلة" #: part/api.py:92 msgid "Filter by starred categories" -msgstr "" +msgstr "تصفية حسب مفضلة فئات" #: part/api.py:109 stock/api.py:289 msgid "Depth" @@ -6087,15 +6079,15 @@ msgstr "" #: part/api.py:109 msgid "Filter by category depth" -msgstr "" +msgstr "تصفية حسب فئة depth" #: part/api.py:127 stock/api.py:307 msgid "Top Level" -msgstr "" +msgstr "أعلى مستوى" #: part/api.py:129 msgid "Filter by top-level categories" -msgstr "" +msgstr "تصفية حسب top-level فئات" #: part/api.py:142 stock/api.py:322 msgid "Cascade" @@ -6103,1216 +6095,1208 @@ msgstr "" #: part/api.py:144 msgid "Include sub-categories in filtered results" -msgstr "" +msgstr "تضمين sub-categories في filtered نتائج" #: part/api.py:164 msgid "Parent" -msgstr "" +msgstr "الأصل" #: part/api.py:166 msgid "Filter by parent category" -msgstr "" +msgstr "تصفية حسب الأصل فئة" #: part/api.py:201 msgid "Exclude sub-categories under the specified category" -msgstr "" +msgstr "استبعاد sub-categories under ال محدد فئة" #: part/api.py:298 stock/api.py:469 msgid "Max Level" -msgstr "" +msgstr "Max مستوى" #: part/api.py:300 stock/api.py:471 msgid "Limit the depth of the category tree" -msgstr "" +msgstr "حد ال depth لـ ال فئة tree" #: part/api.py:442 msgid "Has Results" -msgstr "" +msgstr "لديه نتائج" #: part/api.py:672 msgid "Is Variant" -msgstr "" +msgstr "هو متغير" #: part/api.py:680 msgid "Is Revision" -msgstr "" +msgstr "هو مراجعة" #: part/api.py:690 msgid "Has Revisions" -msgstr "" +msgstr "لديه مراجعات" #: part/api.py:888 msgid "BOM Valid" -msgstr "" +msgstr "BOM صالح" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" -msgstr "" +msgstr "Cascade فئات" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "إذا صحيح، تضمين عناصر في فرعي فئات لـ ال معطى فئة" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "تصفية حسب numeric فئة ID أو ال literal 'null'" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" -msgstr "" +msgstr "تجميع صنف هو نشط" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" -msgstr "" +msgstr "تجميع صنف هو قابل للتتبع" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" -msgstr "" +msgstr "تجميع صنف هو قابل للاختبار" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" -msgstr "" +msgstr "تجميع صنف هو مقفل" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" -msgstr "" +msgstr "مكوّن صنف هو نشط" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" -msgstr "" +msgstr "مكوّن صنف هو قابل للتتبع" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" -msgstr "" +msgstr "مكوّن صنف هو قابل للاختبار" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" -msgstr "" +msgstr "مكوّن صنف هو تجميع" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" -msgstr "" +msgstr "مكوّن صنف هو افتراضي" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" -msgstr "" +msgstr "لديه متاح مخزون" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" 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:29 msgid "Part Categories" -msgstr "" +msgstr "فئات الأصناف" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 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 "أصناف قد غير يكون directly مسند إلى هيكلي فئة، but قد يكون مسند إلى فرعي فئات." #: part/models.py:128 msgid "Default keywords" -msgstr "" +msgstr "افتراضي keywords" #: part/models.py:129 msgid "Default keywords for parts in this category" -msgstr "" +msgstr "افتراضي keywords لـ أصناف في هذا فئة" #: part/models.py:136 stock/models.py:100 stock/models.py:186 msgid "Icon" -msgstr "" +msgstr "أيقونة" #: part/models.py:137 part/serializers.py:175 part/serializers.py:207 #: 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 "أنت لا يمكن make هذا فئة الأصناف هيكلي because some أصناف هي بالفعل مسند إلى هو!" #: 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:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" -msgstr "" +msgstr "الأصناف" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "لا يمكن حذف معلمات لـ مقفل صنف" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "لا يمكن modify معلمات لـ مقفل صنف" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" -msgstr "" +msgstr "لا يمكن حذف هذا صنف بصفته هو هو مقفل" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" -msgstr "" +msgstr "لا يمكن حذف هذا صنف بصفته هو هو ما زال نشط" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" -msgstr "" +msgstr "لا يمكن حذف هذا صنف بصفته هو هو مستخدم في تجميع" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "" +msgstr "صنف '{self}' لا يمكن يكون مستخدم في BOM لـ '{parent}' (recursive)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "" +msgstr "صنف '{parent}' هو مستخدم في BOM لـ '{self}' (recursive)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" -msgstr "" +msgstr "IPN يجب مطابقة تعبير نمطي نمط {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" -msgstr "" +msgstr "صنف لا يمكن يكون مراجعة لـ itself" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" -msgstr "" +msgstr "يجب أن يكون مراجعة رمز محدد لـ صنف معلّم بصفته مراجعة" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" -msgstr "" +msgstr "مراجعات هي فقط مسموح لـ تجميع أصناف" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" -msgstr "" +msgstr "لا يمكن make مراجعة لـ قالب صنف" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" -msgstr "" +msgstr "الأصل صنف يجب نقطة إلى ال نفس قالب" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" -msgstr "" +msgstr "عنصر المخزون مع هذا الرقم التسلسلي بالفعل موجود" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" -msgstr "" +msgstr "إعدادات نسخ IPN غير مسموح في صنف" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." -msgstr "" +msgstr "نسخ صنف مراجعة بالفعل موجود." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." -msgstr "" +msgstr "صنف مع هذا اسم، IPN و مراجعة بالفعل موجود." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" -msgstr "" +msgstr "أصناف لا يمكن يكون مسند إلى هيكلي فئات الأصناف!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" -msgstr "" - -#: part/models.py:1111 -msgid "Is Template" -msgstr "" +msgstr "صنف اسم" #: part/models.py:1112 -msgid "Is this part a template part?" -msgstr "" +msgid "Is Template" +msgstr "هو قالب" -#: part/models.py:1122 -msgid "Is this part a variant of another part?" -msgstr "" +#: part/models.py:1113 +msgid "Is this part a template part?" +msgstr "هو هذا صنف قالب صنف؟" #: part/models.py:1123 +msgid "Is this part a variant of another part?" +msgstr "هو هذا صنف متغير لـ آخر صنف؟" + +#: part/models.py:1124 msgid "Variant Of" -msgstr "" +msgstr "متغير لـ" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" -msgstr "" +msgstr "صنف وصف (اختياري)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" -msgstr "" +msgstr "صنف keywords إلى improve visibility في بحث نتائج" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" -msgstr "" +msgstr "فئة الأصناف" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" -msgstr "" +msgstr "صنف مراجعة أو إصدار رقم" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" -msgstr "" - -#: part/models.py:1173 -msgid "Is this part a revision of another part?" -msgstr "" +msgstr "مراجعة" #: part/models.py:1174 +msgid "Is this part a revision of another part?" +msgstr "هو هذا صنف مراجعة لـ آخر صنف؟" + +#: part/models.py:1175 msgid "Revision Of" -msgstr "" +msgstr "مراجعة لـ" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" -msgstr "" - -#: part/models.py:1227 -msgid "Default Expiry" -msgstr "" +msgstr "حيث هو هذا عنصر normally مخزن؟" #: part/models.py:1228 +msgid "Default Expiry" +msgstr "افتراضي انتهاء" + +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" -msgstr "" +msgstr "انتهاء وقت (في أيام) لـ عناصر المخزون لـ هذا صنف" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" -msgstr "" +msgstr "الحد الأدنى للمخزون" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" -msgstr "" +msgstr "أدنى مسموح مخزون مستوى" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" -msgstr "" +msgstr "الحد الأقصى للمخزون" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" -msgstr "" +msgstr "أقصى مسموح مخزون مستوى" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" -msgstr "" +msgstr "وحدات لـ measure لـ هذا صنف" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" -msgstr "" +msgstr "يمكن هذا صنف يكون built من أخرى أصناف؟" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" -msgstr "" +msgstr "يمكن هذا صنف يكون مستخدم إلى إنتاج أخرى أصناف؟" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" -msgstr "" +msgstr "يقوم هذا صنف لديه تتبع لـ فريد عناصر؟" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" -msgstr "" +msgstr "يمكن هذا صنف لديه اختبار نتائج recorded مقابل هو؟" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" -msgstr "" +msgstr "يمكن هذا صنف يكون purchased من خارجي موردون؟" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" -msgstr "" +msgstr "يمكن هذا صنف يكون sold إلى عملاء؟" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" -msgstr "" +msgstr "هو هذا صنف نشط؟" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" -msgstr "" +msgstr "مقفل أصناف لا يمكن يكون تم التحرير" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" -msgstr "" +msgstr "هو هذا افتراضي صنف، such بصفته software product أو license؟" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "BOM تم التحقق" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "هو ال BOM لـ هذا صنف صالح؟" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" -msgstr "" +msgstr "مخزن BOM checksum" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" -msgstr "" +msgstr "BOM محدد حسب" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" -msgstr "" +msgstr "تاريخ BOM محدد" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" -msgstr "" +msgstr "إنشاء مستخدم" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" -msgstr "" +msgstr "مالك مسؤول لـ هذا صنف" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" -msgstr "" +msgstr "Sell متعدد" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" -msgstr "" +msgstr "عملة مستخدم إلى ذاكرة مؤقتة التسعير حسابات" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" -msgstr "" +msgstr "أدنى BOM تكلفة" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" -msgstr "" +msgstr "أدنى تكلفة لـ مكوّن أصناف" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" -msgstr "" +msgstr "أقصى BOM تكلفة" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" -msgstr "" +msgstr "أقصى تكلفة لـ مكوّن أصناف" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" -msgstr "" +msgstr "أدنى شراء تكلفة" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" -msgstr "" +msgstr "أدنى تاريخي شراء تكلفة" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" -msgstr "" +msgstr "أقصى شراء تكلفة" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" -msgstr "" +msgstr "أقصى تاريخي شراء تكلفة" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" -msgstr "" +msgstr "أدنى داخلي سعر" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" -msgstr "" +msgstr "أدنى تكلفة استنادًا إلى على داخلي سعر فواصل" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" -msgstr "" +msgstr "أقصى داخلي سعر" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" -msgstr "" +msgstr "أقصى تكلفة استنادًا إلى على داخلي سعر فواصل" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" -msgstr "" +msgstr "أدنى مورد سعر" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" -msgstr "" +msgstr "أدنى سعر لـ صنف من خارجي موردون" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" -msgstr "" +msgstr "أقصى مورد سعر" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" -msgstr "" +msgstr "أقصى سعر لـ صنف من خارجي موردون" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" -msgstr "" +msgstr "أدنى متغير تكلفة" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" -msgstr "" +msgstr "محسوب أدنى تكلفة لـ متغير أصناف" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" -msgstr "" +msgstr "أقصى متغير تكلفة" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" -msgstr "" +msgstr "محسوب أقصى تكلفة لـ متغير أصناف" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" -msgstr "" +msgstr "أدنى تكلفة" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" -msgstr "" +msgstr "تجاوز أدنى تكلفة" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" -msgstr "" +msgstr "أقصى تكلفة" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" -msgstr "" +msgstr "تجاوز أقصى تكلفة" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" -msgstr "" +msgstr "محسوب إجمالي أدنى تكلفة" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" -msgstr "" +msgstr "محسوب إجمالي أقصى تكلفة" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" -msgstr "" +msgstr "أدنى سعر البيع" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" -msgstr "" +msgstr "أدنى سعر البيع استنادًا إلى على سعر فواصل" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" -msgstr "" +msgstr "أقصى سعر البيع" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" -msgstr "" +msgstr "أقصى سعر البيع استنادًا إلى على سعر فواصل" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" -msgstr "" +msgstr "أدنى بيع تكلفة" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" -msgstr "" +msgstr "أدنى تاريخي سعر البيع" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" -msgstr "" +msgstr "أقصى بيع تكلفة" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" -msgstr "" +msgstr "أقصى تاريخي سعر البيع" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" -msgstr "" +msgstr "صنف لـ جرد المخزون" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" -msgstr "" +msgstr "عنصر عد" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" -msgstr "" +msgstr "عدد individual مخزون سجلات عند وقت لـ جرد المخزون" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" -msgstr "" +msgstr "إجمالي متاح مخزون عند وقت لـ جرد المخزون" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" -msgstr "" +msgstr "التاريخ" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" -msgstr "" +msgstr "تاريخ جرد المخزون كان performed" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" -msgstr "" +msgstr "أدنى مخزون تكلفة" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" -msgstr "" +msgstr "Estimated أدنى تكلفة لـ مخزون على hand" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" -msgstr "" +msgstr "أقصى مخزون تكلفة" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" -msgstr "" +msgstr "Estimated أقصى تكلفة لـ مخزون على hand" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" -msgstr "" +msgstr "صنف سعر البيع فاصل" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" -msgstr "" +msgstr "صنف اختبار قالب" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" +msgstr "غير صالح قالب اسم - يجب تضمين عند أقل واحد alphanumeric character" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" -msgstr "" +msgstr "اختبار قوالب يمكن فقط يكون تم الإنشاء لـ قابل للاختبار أصناف" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" -msgstr "" +msgstr "اختبار قالب مع ال نفس مفتاح بالفعل موجود لـ صنف" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" -msgstr "" +msgstr "اختبار اسم" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" -msgstr "" +msgstr "إدخال اسم لـ ال اختبار" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" -msgstr "" +msgstr "اختبار مفتاح" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" -msgstr "" +msgstr "Simplified مفتاح لـ ال اختبار" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" -msgstr "" - -#: part/models.py:3793 -msgid "Enter description for this test" -msgstr "" +msgstr "اختبار وصف" #: part/models.py:3797 +msgid "Enter description for this test" +msgstr "إدخال وصف لـ هذا اختبار" + +#: part/models.py:3801 msgid "Is this test enabled?" -msgstr "" +msgstr "هو هذا اختبار مفعّل؟" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" -msgstr "" +msgstr "مطلوب" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" -msgstr "" +msgstr "هو هذا اختبار مطلوب إلى نجاح؟" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" -msgstr "" +msgstr "يتطلب قيمة" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" -msgstr "" +msgstr "يقوم هذا اختبار طلب قيمة عند إضافة نتيجة الاختبار؟" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" -msgstr "" +msgstr "يتطلب مرفق" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" -msgstr "" +msgstr "يقوم هذا اختبار طلب ملف مرفق عند إضافة نتيجة الاختبار؟" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" -msgstr "" +msgstr "صالح خيارات لـ هذا اختبار (comma-separated)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" -msgstr "" +msgstr "غير صالح كمية - لا وحدات محدد لـ صنف" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" -msgstr "" +msgstr "يجب أن يكون الكمية أكبر من أو equal إلى صفر" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" -msgstr "" +msgstr "BOM عنصر لا يمكن يكون modified - تجميع هو مقفل" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" +msgstr "BOM عنصر لا يمكن يكون modified - متغير تجميع هو مقفل" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" -msgstr "" +msgstr "تحديد الأصل صنف" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" -msgstr "" +msgstr "Sub صنف" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" -msgstr "" +msgstr "تحديد صنف إلى يكون مستخدم في BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" -msgstr "" +msgstr "Amount لـ sub-part مستهلك إلى produce واحد صنف" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" -msgstr "" +msgstr "BOM كمية لـ هذا BOM عنصر" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" -msgstr "" +msgstr "هذا BOM عنصر هو اختياري" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" +msgstr "هذا BOM عنصر هو قابل للاستهلاك (هو هو غير متتبع في أوامر الإنتاج)" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" -msgstr "" +msgstr "كمية إعداد" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" -msgstr "" +msgstr "إضافي مطلوب كمية لـ إنتاج، إلى حساب لـ إعداد losses" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" -msgstr "" +msgstr "Estimated attrition لـ إنتاج، expressed بصفته percentage (0-100)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" -msgstr "" +msgstr "Rounding متعدد" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" -msgstr "" +msgstr "Round أعلى مطلوب الإنتاج كمية إلى nearest متعدد لـ هذا قيمة" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" -msgstr "" +msgstr "BOM عنصر مرجع" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" -msgstr "" +msgstr "BOM عنصر ملاحظات" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" -msgstr "" +msgstr "BOM سطر checksum" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" -msgstr "" +msgstr "تم التحقق" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" -msgstr "" +msgstr "هذا BOM عنصر لديه تم تم التحقق" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" -msgstr "" +msgstr "Gets موروث" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "" +msgstr "هذا BOM عنصر هو موروث حسب BOMs لـ متغير أصناف" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" -msgstr "" +msgstr "عناصر المخزون لـ متغير أصناف يمكن يكون مستخدم لـ هذا BOM عنصر" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" -msgstr "" +msgstr "يجب أن يكون الكمية عدد صحيح قيمة لـ قابل للتتبع أصناف" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" -msgstr "" +msgstr "يجب أن يكون Sub صنف محدد" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" -msgstr "" +msgstr "BOM عنصر بديل" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" -msgstr "" +msgstr "بديل صنف لا يمكن يكون ال نفس بصفته ال master صنف" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" -msgstr "" +msgstr "الأصل BOM عنصر" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" -msgstr "" +msgstr "بديل صنف" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" -msgstr "" +msgstr "صنف 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" -msgstr "" +msgstr "صنف 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" -msgstr "" +msgstr "تحديد مرتبط صنف" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" -msgstr "" +msgstr "ملاحظة لـ هذا relationship" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" -msgstr "" +msgstr "صنف relationship لا يمكن يكون تم الإنشاء بين صنف و itself" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" -msgstr "" +msgstr "نسخ relationship بالفعل موجود" #: part/serializers.py:66 msgid "Delete Subcategories" -msgstr "" +msgstr "حذف فئات فرعية" #: part/serializers.py:67 msgid "Delete all sub-categories contained within this category" -msgstr "" +msgstr "حذف الكل sub-categories contained ضمن هذا فئة" #: part/serializers.py:72 msgid "Delete Parts" -msgstr "" +msgstr "حذف الأصناف" #: part/serializers.py:73 msgid "Delete all parts contained within this category" -msgstr "" +msgstr "حذف الكل أصناف contained ضمن هذا فئة" #: part/serializers.py:130 msgid "Parent Category" -msgstr "" +msgstr "الأصل فئة" #: part/serializers.py:131 msgid "Parent part category" -msgstr "" +msgstr "الأصل فئة الأصناف" #: part/serializers.py:139 part/serializers.py:204 msgid "Subcategories" -msgstr "" +msgstr "فئات فرعية" #: part/serializers.py:243 msgid "Results" -msgstr "" +msgstr "نتائج" #: part/serializers.py:244 msgid "Number of results recorded against this template" -msgstr "" +msgstr "عدد نتائج recorded مقابل هذا قالب" #: part/serializers.py:275 part/serializers.py:293 stock/serializers.py:675 msgid "Purchase currency of this stock item" -msgstr "" +msgstr "شراء عملة لـ هذا عنصر المخزون" #: part/serializers.py:320 msgid "File is not an image" -msgstr "" +msgstr "ملف هو غير صورة" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" +#: part/serializers.py:423 +msgid "Initial Stock Quantity" +msgstr "كمية أولي مخزون" -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" +#: part/serializers.py:425 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "تحديد أولي مخزون كمية لـ هذا صنف. إذا كمية هو صفر، لا مخزون هو تمت الإضافة." -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" +#: part/serializers.py:432 +msgid "Initial Stock Location" +msgstr "أولي موقع المخزون" -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" +#: part/serializers.py:433 +msgid "Specify initial stock location for this Part" +msgstr "تحديد أولي موقع المخزون لـ هذا صنف" -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" +#: part/serializers.py:450 +msgid "Select supplier (or leave blank to skip)" +msgstr "تحديد مورد (أو ترك فارغ إلى تخطي)" -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" +#: part/serializers.py:466 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "تحديد شركة مصنعة (أو ترك فارغ إلى تخطي)" -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" +#: part/serializers.py:476 +msgid "Manufacturer part number" +msgstr "صنف الشركة المصنعة رقم" #: part/serializers.py:483 -msgid "Initial Stock Quantity" -msgstr "" - -#: part/serializers.py:485 -msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" +msgid "Selected company is not a valid supplier" +msgstr "محدد شركة هو غير صالح مورد" #: part/serializers.py:492 -msgid "Initial Stock Location" -msgstr "" +msgid "Selected company is not a valid manufacturer" +msgstr "محدد شركة هو غير صالح شركة مصنعة" -#: part/serializers.py:493 -msgid "Specify initial stock location for this Part" -msgstr "" +#: part/serializers.py:503 +msgid "Manufacturer part matching this MPN already exists" +msgstr "صنف الشركة المصنعة مطابق هذا MPN بالفعل موجود" #: part/serializers.py:510 -msgid "Select supplier (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:526 -msgid "Select manufacturer (or leave blank to skip)" -msgstr "" - -#: part/serializers.py:536 -msgid "Manufacturer part number" -msgstr "" - -#: part/serializers.py:543 -msgid "Selected company is not a valid supplier" -msgstr "" - -#: part/serializers.py:552 -msgid "Selected company is not a valid manufacturer" -msgstr "" - -#: part/serializers.py:563 -msgid "Manufacturer part matching this MPN already exists" -msgstr "" - -#: part/serializers.py:570 msgid "Supplier part matching this SKU already exists" -msgstr "" +msgstr "صنف المورد مطابق هذا SKU بالفعل موجود" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" -msgstr "" +msgstr "فئة اسم" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" -msgstr "" +msgstr "كمية هذا صنف حاليًا being في الإنتاج" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" -msgstr "" +msgstr "متبقي كمية لـ هذا صنف مجدول إلى يكون built" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" -msgstr "" +msgstr "عناصر المخزون" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" -msgstr "" +msgstr "مراجعات" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" -msgstr "" +msgstr "إجمالي مخزون" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" -msgstr "" +msgstr "غير مخصص مخزون" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" -msgstr "" +msgstr "متغير مخزون" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" -msgstr "" +msgstr "نسخ صنف" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" -msgstr "" +msgstr "نسخ أولي بيانات من آخر صنف" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "نسخ صورة" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "نسخ صورة من أصلي صنف" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "نسخ BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "نسخ قائمة المواد من أصلي صنف" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "نسخ ملاحظات" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "نسخ ملاحظات من أصلي صنف" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "نسخ اختبارات" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "نسخ اختبار قوالب من أصلي صنف" + +#: part/serializers.py:985 msgid "Initial Stock" -msgstr "" +msgstr "أولي مخزون" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" -msgstr "" +msgstr "إنشاء كمية صنف مع أولي مخزون" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" -msgstr "" +msgstr "مورد معلومات" + +#: part/serializers.py:993 +msgid "Add initial supplier information for this part" +msgstr "إضافة أولي مورد معلومات لـ هذا صنف" + +#: part/serializers.py:1002 +msgid "Copy Category Parameters" +msgstr "نسخ فئة معلمات" + +#: part/serializers.py:1003 +msgid "Copy parameter templates from selected part category" +msgstr "نسخ معلمة قوالب من محدد فئة الأصناف" + +#: part/serializers.py:1008 +msgid "Existing Image" +msgstr "موجود صورة" + +#: part/serializers.py:1009 +msgid "Filename of an existing part image" +msgstr "اسم الملف لـ موجود صنف صورة" #: part/serializers.py:1026 -msgid "Add initial supplier information for this part" -msgstr "" - -#: part/serializers.py:1035 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:1036 -msgid "Copy parameter templates from selected part category" -msgstr "" - -#: part/serializers.py:1041 -msgid "Existing Image" -msgstr "" - -#: part/serializers.py:1042 -msgid "Filename of an existing part image" -msgstr "" - -#: part/serializers.py:1059 msgid "Image file does not exist" -msgstr "" +msgstr "صورة ملف يقوم غير موجود" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" -msgstr "" +msgstr "تحقق entire قائمة المواد" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" -msgstr "" +msgstr "قابل للإنتاج" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" -msgstr "" +msgstr "مطلوب لـ أوامر الإنتاج" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" -msgstr "" +msgstr "مخصص إلى أوامر الإنتاج" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" -msgstr "" +msgstr "مطلوب لـ طلبات البيع" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "مخصص إلى طلبات البيع" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" -msgstr "" +msgstr "صنف IPN" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" -msgstr "" +msgstr "صنف وصف" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" -msgstr "" +msgstr "تحديد صنف إلى إنشاء جرد المخزون معلومات لـ ذلك صنف (و أي متغير أصناف)" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" -msgstr "" +msgstr "تحديد فئة إلى تضمين الكل أصناف ضمن ذلك فئة (و فئات فرعية)" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" -msgstr "" +msgstr "تحديد موقع إلى تضمين الكل أصناف مع مخزون في ذلك موقع (including sub-locations)" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" -msgstr "" +msgstr "إنشاء جرد المخزون سجلات" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" -msgstr "" +msgstr "حفظ جرد المخزون سجلات لـ ال محدد أصناف" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" -msgstr "" +msgstr "إنشاء تقرير" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" -msgstr "" +msgstr "إنشاء جرد المخزون تقرير لـ ال محدد أصناف" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" -msgstr "" +msgstr "أدنى سعر" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" -msgstr "" +msgstr "تجاوز محسوب قيمة لـ أدنى سعر" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" -msgstr "" +msgstr "أدنى سعر عملة" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" -msgstr "" +msgstr "أقصى سعر" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" -msgstr "" +msgstr "تجاوز محسوب قيمة لـ أقصى سعر" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" -msgstr "" +msgstr "أقصى سعر عملة" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" -msgstr "" +msgstr "تحديث" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" -msgstr "" +msgstr "تحديث التسعير لـ هذا صنف" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" -msgstr "" +msgstr "يمكن غير تحويل من مقدم currencies إلى {default_currency}" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" -msgstr "" +msgstr "أدنى سعر يجب غير يكون أكبر من أقصى سعر" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" -msgstr "" +msgstr "أقصى سعر يجب غير يكون أقل من أدنى سعر" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" -msgstr "" +msgstr "Amount مطلوب لـ هذا عنصر (يمكن تضمين وحدات)" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" -msgstr "" +msgstr "تحديد ال الأصل تجميع" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" -msgstr "" +msgstr "تحديد ال مكوّن صنف" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" -msgstr "" +msgstr "غير صالح كمية تنسيق" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" -msgstr "" +msgstr "تحديد صنف إلى نسخ BOM من" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" -msgstr "" +msgstr "إزالة موجود بيانات" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" -msgstr "" +msgstr "إزالة موجود BOM عناصر قبل copying" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" -msgstr "" +msgstr "تضمين موروث" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" -msgstr "" +msgstr "تضمين BOM عناصر الذي هي موروث من templated أصناف" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" -msgstr "" +msgstr "تخطي غير صالح صفوف" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" -msgstr "" +msgstr "تفعيل هذا خيار إلى تخطي غير صالح صفوف" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" -msgstr "" +msgstr "نسخ بديل أصناف" -#: part/serializers.py:2059 +#: part/serializers.py:2026 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} لديه fallen below ال مهيأ أدنى مستوى" #: 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 عنصر المخزون approaching its انتهاء" #: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" -msgstr "" +msgstr "أنت لديه {item_count} عناصر المخزون approaching الخاص بهم انتهاء تواريخ" #: 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)} أيام ago" #: part/tasks.py:99 msgid "Expires today" @@ -7321,7 +7305,7 @@ msgstr "" #: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" -msgstr "" +msgstr "{days_until_expiry} أيام" #: plugin/api.py:80 msgid "Builtin" @@ -7333,271 +7317,271 @@ msgstr "" #: plugin/api.py:109 msgid "Sample" -msgstr "" +msgstr "عينة" #: plugin/api.py:123 plugin/models.py:167 msgid "Installed" -msgstr "" +msgstr "مثبت" #: plugin/api.py:193 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:214 msgid "No match found for barcode data" -msgstr "" +msgstr "لا مطابقة تم العثور لـ باركود بيانات" #: plugin/base/barcodes/api.py:218 msgid "Match found for barcode data" -msgstr "" +msgstr "مطابقة تم العثور لـ باركود بيانات" #: plugin/base/barcodes/api.py:256 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" -msgstr "" +msgstr "نموذج هو غير supported" #: plugin/base/barcodes/api.py:261 msgid "Model instance not found" -msgstr "" +msgstr "نموذج نسخة غير تم العثور" #: plugin/base/barcodes/api.py:290 msgid "Barcode matches existing item" -msgstr "" +msgstr "باركود matches موجود عنصر" #: plugin/base/barcodes/api.py:421 msgid "No matching part data found" -msgstr "" +msgstr "لم يتم العثور على مطابق صنف بيانات" #: plugin/base/barcodes/api.py:437 msgid "No matching supplier parts found" -msgstr "" +msgstr "لم يتم العثور على مطابق أصناف المورد" #: plugin/base/barcodes/api.py:440 msgid "Multiple matching supplier parts found" -msgstr "" +msgstr "متعدد مطابق أصناف المورد تم العثور" #: plugin/base/barcodes/api.py:453 plugin/base/barcodes/api.py:748 msgid "No matching plugin found for barcode data" -msgstr "" +msgstr "لا يوجد إضافة تم العثور لـ باركود بيانات مطابق" #: plugin/base/barcodes/api.py:463 msgid "Matched supplier part" -msgstr "" +msgstr "Matched صنف المورد" #: plugin/base/barcodes/api.py:533 msgid "Item has already been received" -msgstr "" +msgstr "عنصر لديه بالفعل تم مستلم" #: plugin/base/barcodes/api.py:601 msgid "Purchase order Found\\rNo supplier Part Match" -msgstr "" +msgstr "طلب الشراء Found\\rNo صنف المورد مطابقة" #: plugin/base/barcodes/api.py:607 msgid "Supplier Part Found\\rNo Purchase Order Match" -msgstr "" +msgstr "صنف المورد Found\\rNo طلب الشراء مطابقة" #: plugin/base/barcodes/api.py:643 msgid "No plugin match for supplier barcode" -msgstr "" +msgstr "لا إضافة مطابقة لـ مورد باركود" #: plugin/base/barcodes/api.py:696 msgid "Multiple matching line items found" -msgstr "" +msgstr "متعدد مطابق البنود تم العثور" #: plugin/base/barcodes/api.py:699 msgid "No matching line item found" -msgstr "" +msgstr "لم يتم العثور على مطابق بند" #: plugin/base/barcodes/api.py:745 msgid "No sales order provided" -msgstr "" +msgstr "لا طلب البيع مقدم" #: plugin/base/barcodes/api.py:754 msgid "Barcode does not match an existing stock item" -msgstr "" +msgstr "باركود يقوم غير مطابقة موجود عنصر المخزون" #: plugin/base/barcodes/api.py:770 msgid "Stock item does not match line item" -msgstr "" +msgstr "عنصر المخزون يقوم غير مطابقة بند" #: plugin/base/barcodes/api.py:800 msgid "Insufficient stock available" -msgstr "" +msgstr "Insufficient مخزون متاح" #: plugin/base/barcodes/api.py:813 msgid "Stock item allocated to sales order" -msgstr "" +msgstr "عنصر المخزون مخصص إلى طلب البيع" #: plugin/base/barcodes/api.py:816 msgid "Not enough information" -msgstr "" +msgstr "غير enough معلومات" #: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" -msgstr "" +msgstr "تم العثور مطابق عنصر" #: plugin/base/barcodes/mixins.py:393 msgid "Supplier part does not match line item" -msgstr "" +msgstr "صنف المورد يقوم غير مطابقة بند" #: plugin/base/barcodes/mixins.py:396 msgid "Line item is already completed" -msgstr "" +msgstr "بند هو بالفعل مكتمل" #: plugin/base/barcodes/mixins.py:434 msgid "Further information required to receive line item" -msgstr "" +msgstr "Further معلومات مطلوب إلى استلام بند" #: plugin/base/barcodes/mixins.py:442 msgid "Received purchase order line item" -msgstr "" +msgstr "مستلم طلب الشراء بند" #: plugin/base/barcodes/mixins.py:449 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 "PurchaseOrder إلى استلام عناصر مقابل" #: plugin/base/barcodes/serializers.py:174 msgid "Purchase order has not been placed" -msgstr "" +msgstr "طلب الشراء لديه غير تم placed" #: 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 "شحنة لديه بالفعل تم delivered" #: 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:56 msgid "Error rendering label to PDF" -msgstr "" +msgstr "خطأ في عرض ملصق إلى PDF" #: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" -msgstr "" +msgstr "خطأ في عرض ملصق إلى HTML" #: plugin/base/label/mixins.py:156 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 "يوفر native الدعم لـ باركودات" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7619,83 +7603,83 @@ msgstr "" #: 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 باركودات (human readable)" #: plugin/builtin/barcodes/inventree_barcode.py:38 msgid "Short barcodes (space optimized)" -msgstr "" +msgstr "Short باركودات (space optimized)" #: plugin/builtin/barcodes/inventree_barcode.py:43 msgid "Short Barcode Prefix" -msgstr "" +msgstr "Short باركود Prefix" #: 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 "Customize ال prefix مستخدم لـ short باركودات، قد يكون useful لـ environments مع متعدد InvenTree instances" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" -msgstr "" +msgstr "تلقائي إنشاء Builds" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 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 "صرف Backdated طلبات" #: plugin/builtin/events/auto_issue_orders.py:63 msgid "Automatically issue orders that are backdated" -msgstr "" +msgstr "تلقائيًا صرف طلبات ذلك هي backdated" #: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" @@ -7703,311 +7687,311 @@ msgstr "" #: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" -msgstr "" +msgstr "عدد levels إلى تصدير - تعيين إلى صفر إلى تصدير الكل BOM levels" #: 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 "Multi-Level BOM مصدّر" #: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" -msgstr "" +msgstr "يوفر الدعم لـ exporting multi-level BOMs" #: 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 Generic مصدّر" #: plugin/builtin/exporter/inventree_exporter.py:15 msgid "Provides support for exporting data from InvenTree" -msgstr "" +msgstr "يوفر الدعم لـ exporting بيانات من 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 stocktake data" -msgstr "" +msgstr "تضمين صنف متغير مخزون في جرد المخزون بيانات" #: plugin/builtin/exporter/stocktake_exporter.py:37 msgid "Exclude Zero Stock Entries" -msgstr "" +msgstr "استبعاد صفر مخزون سجلات" #: plugin/builtin/exporter/stocktake_exporter.py:38 msgid "Exclude parts with zero stock from the exported dataset" -msgstr "" +msgstr "استبعاد أصناف مع صفر مخزون من ال exported dataset" #: plugin/builtin/exporter/stocktake_exporter.py:50 msgid "Part Stocktake Exporter" -msgstr "" +msgstr "صنف جرد المخزون مصدّر" #: plugin/builtin/exporter/stocktake_exporter.py:51 msgid "Exporter for part stocktake data" -msgstr "" +msgstr "مصدّر لـ صنف جرد المخزون بيانات" #: plugin/builtin/exporter/stocktake_exporter.py:117 msgid "Minimum Unit Cost" -msgstr "" +msgstr "أدنى وحدة تكلفة" #: plugin/builtin/exporter/stocktake_exporter.py:118 msgid "Maximum Unit Cost" -msgstr "" +msgstr "أقصى وحدة تكلفة" #: plugin/builtin/exporter/stocktake_exporter.py:119 msgid "Minimum Total Cost" -msgstr "" +msgstr "أدنى إجمالي تكلفة" #: plugin/builtin/exporter/stocktake_exporter.py:120 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 "Integrated 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 "Integrated بريد إلكتروني إشعار طرق" #: 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 "Integrated 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" -msgstr "" +msgstr "URL ذلك هو مستخدم إلى إرسال messages إلى slack channel" #: 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 "Built-in آلة أنواع لـ 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 "Notify مستخدمون حول صنف تغييرات" #: 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}` لديه تم triggered مع `{part_action}` event" #: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" -msgstr "" +msgstr "InvenTree PDF ملصق طابعة" #: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" -msgstr "" +msgstr "يوفر native الدعم لـ الطباعة PDF ملصقات" #: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:79 msgid "Debug mode" -msgstr "" +msgstr "تصحيح الأخطاء وضع" #: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:80 msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "" +msgstr "تفعيل تصحيح الأخطاء وضع - returns raw HTML بدلًا من لـ PDF" #: 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:31 msgid "Page size for the label sheet" -msgstr "" +msgstr "صفحة حجم لـ ال ملصق sheet" #: plugin/builtin/labels/label_sheet.py:36 msgid "Skip Labels" -msgstr "" +msgstr "تخطي ملصقات" #: plugin/builtin/labels/label_sheet.py:37 msgid "Skip this number of labels when printing label sheets" -msgstr "" +msgstr "تخطي هذا رقم لـ ملصقات عند الطباعة ملصق sheets" #: plugin/builtin/labels/label_sheet.py:44 msgid "Border" @@ -8015,7 +7999,7 @@ msgstr "" #: plugin/builtin/labels/label_sheet.py:45 msgid "Print a border around each label" -msgstr "" +msgstr "طباعة border around كل ملصق" #: plugin/builtin/labels/label_sheet.py:50 report/models.py:397 msgid "Landscape" @@ -8023,260 +8007,260 @@ msgstr "" #: plugin/builtin/labels/label_sheet.py:51 msgid "Print the label sheet in landscape mode" -msgstr "" +msgstr "طباعة ال ملصق sheet في landscape وضع" #: plugin/builtin/labels/label_sheet.py:56 msgid "Page Margin" -msgstr "" +msgstr "صفحة Margin" #: plugin/builtin/labels/label_sheet.py:57 msgid "Margin around the page in mm" -msgstr "" +msgstr "Margin around ال صفحة في mm" #: plugin/builtin/labels/label_sheet.py:70 msgid "InvenTree Label Sheet Printer" -msgstr "" +msgstr "InvenTree ملصق Sheet طابعة" #: plugin/builtin/labels/label_sheet.py:71 msgid "Arrays multiple labels onto a single sheet" -msgstr "" +msgstr "Arrays متعدد ملصقات onto مفرد sheet" #: plugin/builtin/labels/label_sheet.py:123 msgid "Label is too large for page size" -msgstr "" +msgstr "ملصق هو أيضًا large لـ صفحة حجم" #: plugin/builtin/labels/label_sheet.py:162 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 "ال مورد الذي acts بصفته '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 "ال مورد الذي acts بصفته '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 "ال مورد الذي acts بصفته '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 "ال مورد الذي acts بصفته 'TME'" #: plugin/installer.py:239 plugin/installer.py:343 plugin/serializers.py:169 #: plugin/serializers.py:275 msgid "Only superuser accounts can administer plugins" -msgstr "" +msgstr "فقط مستخدم فائق accounts يمكن administer إضافات" #: plugin/installer.py:242 msgid "Plugin installation is disabled" -msgstr "" +msgstr "إضافة تثبيت هو معطّل" #: plugin/installer.py:272 msgid "No package name or URL provided for installation" -msgstr "" +msgstr "لا طرد اسم أو URL مقدم لـ تثبيت" #: plugin/installer.py:276 msgid "Invalid characters in package name or URL" -msgstr "" +msgstr "غير صالح characters في طرد اسم أو URL" #: plugin/installer.py:286 msgid "Installed plugin successfully" -msgstr "" +msgstr "مثبت إضافة بنجاح" #: plugin/installer.py:291 #, python-brace-format msgid "Installed plugin into {path}" -msgstr "" +msgstr "مثبت إضافة إلى {path}" #: plugin/installer.py:317 msgid "Plugin was not found in registry" -msgstr "" +msgstr "إضافة كان غير تم العثور في سجل" #: plugin/installer.py:320 msgid "Plugin is not a packaged plugin" -msgstr "" +msgstr "إضافة هو غير packaged إضافة" #: plugin/installer.py:323 msgid "Plugin package name not found" -msgstr "" +msgstr "إضافة طرد اسم غير تم العثور" #: plugin/installer.py:326 msgid "Only staff users can administer plugins" -msgstr "" +msgstr "فقط staff مستخدمون يمكن administer إضافات" #: plugin/installer.py:346 msgid "Plugin uninstalling is disabled" -msgstr "" +msgstr "إضافة uninstalling هو معطّل" #: plugin/installer.py:350 msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" +msgstr "إضافة لا يمكن يكون غير مثبت بصفته هو هو حاليًا نشط" #: plugin/installer.py:356 msgid "Plugin cannot be uninstalled as it is mandatory" -msgstr "" +msgstr "إضافة لا يمكن يكون غير مثبت بصفته هو هو mandatory" #: plugin/installer.py:361 msgid "Plugin cannot be uninstalled as it is a sample plugin" -msgstr "" +msgstr "إضافة لا يمكن يكون غير مثبت بصفته هو هو عينة إضافة" #: plugin/installer.py:366 msgid "Plugin cannot be uninstalled as it is a built-in plugin" -msgstr "" +msgstr "إضافة لا يمكن يكون غير مثبت بصفته هو هو built-in إضافة" #: plugin/installer.py:370 msgid "Plugin is not installed" -msgstr "" +msgstr "إضافة هو غير مثبت" #: plugin/installer.py:388 msgid "Plugin installation not found" -msgstr "" +msgstr "إضافة تثبيت غير تم العثور" #: plugin/installer.py:404 msgid "Uninstalled plugin successfully" -msgstr "" +msgstr "غير مثبت إضافة بنجاح" #: plugin/models.py:39 msgid "Plugin Configuration" -msgstr "" +msgstr "إضافة تهيئة" #: plugin/models.py:40 msgid "Plugin Configurations" -msgstr "" +msgstr "إضافة Configurations" #: 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 "Builtin إضافة" #: plugin/models.py:192 msgid "Mandatory Plugin" -msgstr "" +msgstr "Mandatory إضافة" #: plugin/models.py:210 msgid "Package Plugin" -msgstr "" +msgstr "طرد إضافة" #: plugin/models.py:301 plugin/models.py:384 msgid "Plugin" -msgstr "" +msgstr "الإضافة" #: plugin/plugin.py:389 msgid "No author found" -msgstr "" +msgstr "لم يتم العثور على author" #: plugin/registry.py:780 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "" +msgstr "إضافة '{p}' هو غير compatible مع ال حالي InvenTree إصدار {v}" #: plugin/registry.py:783 #, python-brace-format msgid "Plugin requires at least version {v}" -msgstr "" +msgstr "إضافة يتطلب عند أقل إصدار {v}" #: plugin/registry.py:785 #, python-brace-format msgid "Plugin requires at most version {v}" -msgstr "" +msgstr "إضافة يتطلب عند most إصدار {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 "تفعيل PO الوظيفة في InvenTree واجهة" #: 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 "مفتاح مطلوب لـ accessing خارجي واجهة API" #: plugin/samples/integration/sample.py:83 msgid "Numerical" @@ -8284,19 +8268,19 @@ msgstr "" #: plugin/samples/integration/sample.py:84 msgid "A numerical setting" -msgstr "" +msgstr "numerical إعداد" #: plugin/samples/integration/sample.py:90 msgid "Choice Setting" -msgstr "" +msgstr "Choice إعداد" #: 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" @@ -8304,191 +8288,191 @@ msgstr "" #: 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 "تفعيل مخصص لوحات لـ صنف views" #: 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 "تفعيل مخصص لوحات لـ طلب الشراء views" #: plugin/samples/integration/user_interface_sample.py:39 msgid "Enable Broken Panels" -msgstr "" +msgstr "تفعيل Broken لوحات" #: plugin/samples/integration/user_interface_sample.py:40 msgid "Enable broken panels for testing" -msgstr "" +msgstr "تفعيل broken لوحات لـ testing" #: plugin/samples/integration/user_interface_sample.py:45 msgid "Enable Dynamic Panel" -msgstr "" +msgstr "تفعيل Dynamic Panel" #: plugin/samples/integration/user_interface_sample.py:46 msgid "Enable dynamic panels for testing" -msgstr "" +msgstr "تفعيل dynamic لوحات لـ testing" #: plugin/samples/integration/user_interface_sample.py:114 msgid "Part Panel" -msgstr "" +msgstr "صنف Panel" #: plugin/samples/integration/user_interface_sample.py:149 msgid "Broken Dashboard Item" -msgstr "" +msgstr "Broken لوحة المعلومات عنصر" #: plugin/samples/integration/user_interface_sample.py:151 msgid "This is a broken dashboard item - it will not render!" -msgstr "" +msgstr "هذا هو broken لوحة المعلومات عنصر - هو سوف غير render!" #: 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 "هذا هو عينة لوحة المعلومات عنصر. هو renders simple نص لـ 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 "هذا هو admin-only لوحة المعلومات عنصر." #: 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 "اسم لـ ال إضافة طرد - يمكن أيضًا contain إصدار indicator" #: 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 "إصدار specifier لـ ال إضافة. ترك فارغ لـ الأحدث إصدار." #: 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 "هذا سوف تثبيت هذا إضافة الآن إلى ال حالي نسخة. ال نسخة سوف انتقال إلى maintenance." #: plugin/serializers.py:150 msgid "Installation not confirmed" -msgstr "" +msgstr "تثبيت غير confirmed" #: plugin/serializers.py:152 msgid "Either packagename or URL must be provided" -msgstr "" +msgstr "يجب أن يكون Either packagename أو 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 "Perform كامل إعادة تحميل لـ ال إضافة سجل" #: plugin/serializers.py:198 msgid "Force reload" -msgstr "" +msgstr "Force إعادة تحميل" #: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" +msgstr "Force إعادة تحميل لـ ال إضافة سجل، even إذا هو هو بالفعل loaded" #: plugin/serializers.py:207 msgid "Collect plugins" -msgstr "" +msgstr "Collect إضافات" #: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" -msgstr "" +msgstr "Collect إضافات و إضافة them إلى ال سجل" #: plugin/serializers.py:236 msgid "Activate Plugin" -msgstr "" +msgstr "Activate إضافة" #: plugin/serializers.py:237 msgid "Activate this plugin" -msgstr "" +msgstr "Activate هذا إضافة" #: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" -msgstr "" +msgstr "Mandatory إضافة لا يمكن يكون deactivated" #: 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:292 msgid "Indicates if the setting is overridden by configuration" -msgstr "" +msgstr "يشير إذا ال إعداد هو overridden حسب تهيئة" #: plugin/serializers.py:312 msgid "The user for which this setting applies" -msgstr "" +msgstr "ال مستخدم لـ الذي هذا إعداد applies" #: report/api.py:45 report/serializers.py:125 report/serializers.py:175 msgid "Items" -msgstr "" +msgstr "عناصر" #: report/api.py:116 msgid "Plugin not found" -msgstr "" +msgstr "إضافة غير تم العثور" #: report/api.py:118 msgid "Plugin does not support label printing" -msgstr "" +msgstr "إضافة يقوم غير الدعم ملصق الطباعة" #: report/api.py:170 report/api.py:279 msgid "You do not have permission to view this model type" -msgstr "" +msgstr "أنت تنفيذ غير لديه صلاحية إلى عرض هذا نموذج نوع" #: report/api.py:174 msgid "Invalid label dimensions" -msgstr "" +msgstr "غير صالح ملصق dimensions" #: report/api.py:192 report/api.py:290 msgid "No valid items provided to template" -msgstr "" +msgstr "لا صالح عناصر مقدم إلى قالب" #: report/helpers.py:43 msgid "A4" @@ -8508,92 +8492,92 @@ msgstr "" #: report/models.py:131 msgid "Template file with this name already exists" -msgstr "" +msgstr "قالب ملف مع هذا اسم بالفعل موجود" #: report/models.py:223 msgid "Template name" -msgstr "" +msgstr "قالب اسم" #: report/models.py:229 msgid "Template description" -msgstr "" +msgstr "قالب وصف" #: report/models.py:235 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "مراجعة رقم (auto-increments)" #: report/models.py:241 msgid "Attach to Model on Print" -msgstr "" +msgstr "إرفاق إلى نموذج على طباعة" #: report/models.py:243 msgid "Save report output as an attachment against linked model instance when printing" -msgstr "" +msgstr "حفظ تقرير مخرج بصفته مرفق مقابل مرتبط نموذج نسخة عند الطباعة" #: report/models.py:291 msgid "Filename Pattern" -msgstr "" +msgstr "اسم الملف نمط" #: report/models.py:292 msgid "Pattern for generating filenames" -msgstr "" +msgstr "نمط لـ جارٍ الإنشاء filenames" #: report/models.py:297 msgid "Template is enabled" -msgstr "" +msgstr "قالب هو مفعّل" #: report/models.py:304 msgid "Target model type for template" -msgstr "" +msgstr "هدف نموذج نوع لـ قالب" #: report/models.py:324 msgid "Filters" -msgstr "" +msgstr "مرشحات" #: report/models.py:325 msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +msgstr "قالب استعلام مرشحات (comma-separated قائمة لـ key=value pairs)" #: report/models.py:384 report/models.py:718 msgid "Template file" -msgstr "" +msgstr "قالب ملف" #: report/models.py:392 msgid "Page size for PDF reports" -msgstr "" +msgstr "صفحة حجم لـ PDF تقارير" #: report/models.py:398 msgid "Render report in landscape orientation" -msgstr "" +msgstr "Render تقرير في landscape orientation" #: report/models.py:403 msgid "Merge" -msgstr "" +msgstr "دمج" #: report/models.py:404 msgid "Render a single report against selected items" -msgstr "" +msgstr "Render مفرد تقرير مقابل محدد عناصر" #: report/models.py:471 #, python-brace-format msgid "Report generated from template {self.name}" -msgstr "" +msgstr "تقرير تم الإنشاء من قالب {self.name}" #: report/models.py:581 report/models.py:620 msgid "Template syntax error" -msgstr "" +msgstr "قالب syntax خطأ" #: report/models.py:588 report/models.py:627 msgid "Error rendering report" -msgstr "" +msgstr "خطأ في عرض تقرير" #: report/models.py:655 msgid "Error generating report" -msgstr "" +msgstr "خطأ في جارٍ الإنشاء تقرير" #: report/models.py:686 msgid "Error merging report outputs" -msgstr "" +msgstr "خطأ في merging تقرير مخرجات" #: report/models.py:724 msgid "Width [mm]" @@ -8601,7 +8585,7 @@ msgstr "" #: report/models.py:725 msgid "Label width, specified in mm" -msgstr "" +msgstr "ملصق width، محدد في mm" #: report/models.py:731 msgid "Height [mm]" @@ -8609,74 +8593,74 @@ msgstr "" #: report/models.py:732 msgid "Label height, specified in mm" -msgstr "" +msgstr "ملصق height، محدد في mm" #: report/models.py:846 msgid "Error printing labels" -msgstr "" +msgstr "خطأ في الطباعة ملصقات" #: report/models.py:865 msgid "Snippet" -msgstr "" +msgstr "مقتطف" #: report/models.py:866 msgid "Report snippet file" -msgstr "" +msgstr "تقرير مقتطف ملف" #: report/models.py:873 msgid "Snippet file description" -msgstr "" +msgstr "مقتطف ملف وصف" #: report/models.py:891 msgid "Asset" -msgstr "" +msgstr "أصل" #: report/models.py:892 msgid "Report asset file" -msgstr "" +msgstr "تقرير أصل ملف" #: report/models.py:899 msgid "Asset file description" -msgstr "" +msgstr "أصل ملف وصف" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "يجب أن يكون المستخدم authenticated إلى حفظ تقرير قوالب" #: 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 "قائمة لـ عنصر أساسي keys إلى تضمين في ال تقرير" #: 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" @@ -8692,39 +8676,39 @@ msgstr "" #: report/templates/report/inventree_test_report.html:162 #: report/templates/report/inventree_transfer_order_report.html:37 msgid "Part image" -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 @@ -8732,608 +8716,608 @@ msgstr "" #: report/templates/report/inventree_test_report.html:88 stock/models.py:1135 #: stock/serializers.py:165 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:658 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/templates/report/inventree_transfer_order_report.html:28 msgid "Transferred" -msgstr "" +msgstr "محوّل" #: report/templatetags/report.py:192 msgid "Invalid media file path" -msgstr "" +msgstr "غير صالح media ملف مسار" #: report/templatetags/report.py:211 msgid "Invalid static file path" -msgstr "" +msgstr "غير صالح static ملف مسار" #: report/templatetags/report.py:313 msgid "Asset file not found" -msgstr "" +msgstr "أصل ملف غير تم العثور" #: report/templatetags/report.py:379 report/templatetags/report.py:495 msgid "Image file not found" -msgstr "" +msgstr "صورة ملف غير تم العثور" #: report/templatetags/report.py:464 msgid "No image file specified" -msgstr "" +msgstr "لا صورة ملف محدد" #: report/templatetags/report.py:489 msgid "part_image tag requires a Part instance" -msgstr "" +msgstr "part_image وسم يتطلب صنف نسخة" #: report/templatetags/report.py:581 msgid "company_image tag requires a Company instance" -msgstr "" +msgstr "company_image وسم يتطلب شركة نسخة" #: stock/api.py:289 msgid "Filter by location depth" -msgstr "" +msgstr "تصفية حسب موقع depth" #: stock/api.py:309 msgid "Filter by top-level locations" -msgstr "" +msgstr "تصفية حسب top-level مواقع" #: stock/api.py:324 msgid "Include sub-locations in filtered results" -msgstr "" +msgstr "تضمين sub-locations في filtered نتائج" #: stock/api.py:345 stock/serializers.py:1263 msgid "Parent Location" -msgstr "" +msgstr "الأصل موقع" #: stock/api.py:346 msgid "Filter by parent location" -msgstr "" +msgstr "تصفية حسب الأصل موقع" #: stock/api.py:625 msgid "Part name (case insensitive)" -msgstr "" +msgstr "صنف اسم (case insensitive)" #: stock/api.py:631 msgid "Part name contains (case insensitive)" -msgstr "" +msgstr "صنف اسم يحتوي (case insensitive)" #: stock/api.py:637 msgid "Part name (regex)" -msgstr "" +msgstr "صنف اسم (تعبير نمطي)" #: stock/api.py:642 msgid "Part IPN (case insensitive)" -msgstr "" +msgstr "صنف IPN (case insensitive)" #: stock/api.py:648 msgid "Part IPN contains (case insensitive)" -msgstr "" +msgstr "صنف IPN يحتوي (case insensitive)" #: stock/api.py:654 msgid "Part IPN (regex)" -msgstr "" +msgstr "صنف IPN (تعبير نمطي)" #: stock/api.py:666 msgid "Minimum stock" -msgstr "" +msgstr "أدنى مخزون" #: stock/api.py:670 msgid "Maximum stock" -msgstr "" +msgstr "أقصى مخزون" #: stock/api.py:673 msgid "Status Code" -msgstr "" +msgstr "حالة رمز" #: stock/api.py:717 msgid "External Location" -msgstr "" +msgstr "خارجي موقع" #: stock/api.py:816 msgid "Consumed by Build Order" -msgstr "" +msgstr "مستهلك حسب أمر الإنتاج" #: stock/api.py:826 msgid "Installed in other stock item" -msgstr "" +msgstr "مثبت في أخرى عنصر المخزون" #: stock/api.py:915 msgid "Part Tree" -msgstr "" +msgstr "صنف Tree" #: stock/api.py:944 msgid "Updated before" -msgstr "" +msgstr "تم التحديث قبل" #: stock/api.py:948 msgid "Updated after" -msgstr "" +msgstr "تم التحديث بعد" #: stock/api.py:952 msgid "Stocktake Before" -msgstr "" +msgstr "جرد المخزون قبل" #: stock/api.py:956 msgid "Stocktake After" -msgstr "" +msgstr "جرد المخزون بعد" #: stock/api.py:960 msgid "Has Stocktake Date" -msgstr "" +msgstr "تاريخ لديه جرد المخزون" #: stock/api.py:971 msgid "Expiry date before" -msgstr "" +msgstr "انتهاء تاريخ قبل" #: stock/api.py:975 msgid "Expiry date after" -msgstr "" +msgstr "انتهاء تاريخ بعد" #: stock/api.py:978 stock/serializers.py:663 msgid "Stale" -msgstr "" +msgstr "قديم" #: stock/api.py:1004 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "Provide StockItem PK إلى استبعاد ذلك عنصر و الكل its descendants" #: stock/api.py:1022 msgid "Cascade Locations" -msgstr "" +msgstr "Cascade مواقع" #: stock/api.py:1023 msgid "If true, include items in child locations of the given location" -msgstr "" +msgstr "إذا صحيح، تضمين عناصر في فرعي مواقع لـ ال معطى موقع" #: stock/api.py:1029 msgid "Filter by numeric Location ID or the literal 'null'" -msgstr "" +msgstr "تصفية حسب numeric موقع ID أو ال literal 'null'" #: stock/api.py:1131 msgid "Quantity is required" -msgstr "" +msgstr "الكمية مطلوب" #: stock/api.py:1136 msgid "Valid part must be supplied" -msgstr "" +msgstr "يجب أن يكون صالح صنف مورد" #: stock/api.py:1167 msgid "The given supplier part does not exist" -msgstr "" +msgstr "ال معطى صنف المورد يقوم غير موجود" #: stock/api.py:1177 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" +msgstr "ال صنف المورد لديه حزمة حجم محدد، but flag use_pack_size غير تعيين" #: stock/api.py:1209 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" +msgstr "الأرقام التسلسلية لا يمكن يكون مورد لـ non-trackable صنف" #: stock/api.py:1454 msgid "Include Installed" -msgstr "" +msgstr "تضمين مثبت" #: stock/api.py:1456 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "إذا صحيح، تضمين اختبار نتائج لـ عناصر مثبت underneath ال معطى عنصر المخزون" #: stock/api.py:1463 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "تصفية حسب numeric عنصر المخزون ID" #: stock/api.py:1484 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "عنصر المخزون مع ID {id} يقوم غير موجود" #: stock/api.py:1558 msgid "Include Part Variants" -msgstr "" +msgstr "تضمين صنف متغيرات" #: stock/api.py:1588 msgid "Date after" -msgstr "" +msgstr "تاريخ بعد" #: stock/api.py:1592 msgid "Date before" -msgstr "" +msgstr "تاريخ قبل" #: stock/models.py:74 msgid "Stock Location type" -msgstr "" +msgstr "موقع المخزون نوع" #: stock/models.py:75 msgid "Stock Location types" -msgstr "" +msgstr "موقع المخزون أنواع" #: stock/models.py:101 msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" +msgstr "افتراضي أيقونة لـ الكل مواقع ذلك لديه لا أيقونة تعيين (اختياري)" #: stock/models.py:149 stock/models.py:1097 msgid "Stock Location" -msgstr "" +msgstr "موقع مخزون" #: stock/models.py:150 users/ruleset.py:32 msgid "Stock Locations" -msgstr "" +msgstr "مواقع المخزون" #: stock/models.py:197 stock/models.py:1269 msgid "Owner" -msgstr "" +msgstr "مالك" #: stock/models.py:198 stock/models.py:1270 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 "عناصر المخزون قد غير يكون directly located إلى هيكلي مواقع المخزون، but قد يكون located إلى فرعي مواقع." #: stock/models.py:213 users/models.py:493 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 "أنت لا يمكن make هذا موقع المخزون هيكلي because some عناصر المخزون هي بالفعل located إلى هو!" #: stock/models.py:412 msgid "Oldest stock first (FIFO)" -msgstr "" +msgstr "Oldest مخزون أول (FIFO)" #: stock/models.py:413 msgid "Newest stock first (LIFO)" -msgstr "" +msgstr "Newest مخزون أول (LIFO)" #: stock/models.py:414 msgid "Smallest quantity first" -msgstr "" +msgstr "Smallest كمية أول" #: stock/models.py:415 msgid "Largest quantity first" -msgstr "" +msgstr "Largest كمية أول" #: stock/models.py:416 msgid "Soonest expiry date first" -msgstr "" +msgstr "Soonest انتهاء تاريخ أول" #: stock/models.py:559 msgid "Serialized stock items cannot be deleted" -msgstr "" +msgstr "مسلسل عناصر المخزون لا يمكن يكون تم الحذف" #: stock/models.py:694 #, python-brace-format msgid "{field} does not exist" -msgstr "" +msgstr "{field} يقوم غير موجود" #: stock/models.py:707 msgid "Part must be specified" -msgstr "" +msgstr "يجب أن يكون الصنف محدد" #: stock/models.py:945 msgid "Stock items cannot be located into structural stock locations!" -msgstr "" +msgstr "عناصر المخزون لا يمكن يكون located إلى هيكلي مواقع المخزون!" #: stock/models.py:966 msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" -msgstr "" +msgstr "تحرير لـ الأرقام التسلسلية هو غير مسموح - هذا عنصر لديه بالفعل تم مسند الرقم التسلسلي" #: stock/models.py:983 stock/serializers.py:474 msgid "Stock item cannot be created for virtual parts" -msgstr "" +msgstr "عنصر المخزون لا يمكن يكون تم الإنشاء لـ افتراضي أصناف" #: stock/models.py:1000 #, 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:1010 stock/models.py:1023 msgid "Quantity must be 1 for item with a serial number" -msgstr "" +msgstr "يجب أن يكون الكمية 1 لـ عنصر مع الرقم التسلسلي" #: stock/models.py:1013 msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" +msgstr "الرقم التسلسلي لا يمكن يكون تعيين إذا كمية أكبر من 1" #: stock/models.py:1035 msgid "Item cannot belong to itself" -msgstr "" +msgstr "عنصر لا يمكن belong إلى itself" #: stock/models.py:1040 msgid "Item must have a build reference if is_building=True" -msgstr "" +msgstr "عنصر يجب لديه إنتاج مرجع إذا is_building=True" #: stock/models.py:1053 msgid "Build reference does not point to the same part object" -msgstr "" +msgstr "إنتاج مرجع يقوم غير نقطة إلى ال نفس صنف كائن" #: stock/models.py:1067 msgid "Parent Stock Item" -msgstr "" +msgstr "الأصل عنصر المخزون" #: stock/models.py:1079 msgid "Base part" -msgstr "" +msgstr "أساس صنف" #: stock/models.py:1089 msgid "Select a matching supplier part for this stock item" -msgstr "" +msgstr "تحديد مطابق صنف المورد لـ هذا عنصر المخزون" #: stock/models.py:1101 msgid "Where is this stock item located?" -msgstr "" +msgstr "حيث هو هذا عنصر المخزون located؟" #: stock/models.py:1109 stock/serializers.py:1722 msgid "Packaging this stock item is stored in" -msgstr "" +msgstr "تعبئة هذا عنصر المخزون هو مخزن في" #: stock/models.py:1115 msgid "Installed In" -msgstr "" +msgstr "مثبت في" #: stock/models.py:1120 msgid "Is this item installed in another item?" -msgstr "" +msgstr "هو هذا عنصر مثبت في آخر عنصر؟" #: stock/models.py:1139 msgid "Serial number for this item" -msgstr "" +msgstr "الرقم التسلسلي لـ هذا عنصر" #: stock/models.py:1156 stock/serializers.py:1707 msgid "Batch code for this stock item" -msgstr "" +msgstr "رمز الدفعة لـ هذا عنصر المخزون" #: stock/models.py:1161 msgid "Stock Quantity" -msgstr "" +msgstr "كمية المخزون" #: stock/models.py:1171 msgid "Source Build" -msgstr "" +msgstr "المصدر إنتاج" #: stock/models.py:1174 msgid "Build for this stock item" -msgstr "" +msgstr "إنتاج لـ هذا عنصر المخزون" #: stock/models.py:1181 msgid "Consumed By" -msgstr "" +msgstr "مستهلك حسب" #: stock/models.py:1184 msgid "Build order which consumed this stock item" -msgstr "" +msgstr "أمر الإنتاج الذي مستهلك هذا عنصر المخزون" #: stock/models.py:1193 msgid "Source Purchase Order" -msgstr "" +msgstr "المصدر طلب الشراء" #: stock/models.py:1197 msgid "Purchase order for this stock item" -msgstr "" +msgstr "طلب الشراء لـ هذا عنصر المخزون" #: stock/models.py:1203 msgid "Destination Sales Order" -msgstr "" +msgstr "الوجهة طلب البيع" #: stock/models.py:1214 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" +msgstr "تاريخ انتهاء تاريخ لـ عنصر المخزون. مخزون سوف يكون considered منتهي بعد هذا" #: stock/models.py:1234 msgid "Date that this stock item was created" -msgstr "" +msgstr "تاريخ ذلك هذا عنصر المخزون كان تم الإنشاء" #: stock/models.py:1239 msgid "Delete on deplete" -msgstr "" +msgstr "حذف على deplete" #: stock/models.py:1240 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "حذف هذا عنصر المخزون عند مخزون هو نافد" #: stock/models.py:1261 msgid "Single unit purchase price at time of purchase" -msgstr "" +msgstr "مفرد وحدة سعر الشراء عند وقت لـ شراء" #: stock/models.py:1292 msgid "Converted to part" -msgstr "" +msgstr "Converted إلى صنف" #: stock/models.py:1494 msgid "Quantity exceeds available stock" -msgstr "" +msgstr "كمية يتجاوز متاح مخزون" #: stock/models.py:1981 msgid "Part is not set as trackable" -msgstr "" +msgstr "صنف هو غير تعيين بصفته قابل للتتبع" #: stock/models.py:1987 msgid "Quantity must be integer" -msgstr "" +msgstr "يجب أن يكون الكمية عدد صحيح" #: stock/models.py:1995 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" +msgstr "كمية يجب غير تجاوز متاح مخزون كمية ({self.quantity})" #: stock/models.py:2001 msgid "Serial numbers must be provided as a list" -msgstr "" +msgstr "يجب أن يكون الأرقام التسلسلية مقدم بصفته قائمة" #: stock/models.py:2006 msgid "Quantity does not match serial numbers" -msgstr "" +msgstr "كمية يقوم غير مطابقة الأرقام التسلسلية" #: stock/models.py:2024 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "لا يمكن إسناد مخزون إلى هيكلي موقع" #: stock/models.py:2141 stock/models.py:3188 msgid "Test template does not exist" -msgstr "" +msgstr "اختبار قالب يقوم غير موجود" #: stock/models.py:2159 msgid "Stock item has been assigned to a sales order" -msgstr "" +msgstr "عنصر المخزون لديه تم مسند إلى طلب البيع" #: stock/models.py:2163 msgid "Stock item is installed in another item" -msgstr "" +msgstr "عنصر المخزون هو مثبت في آخر عنصر" #: stock/models.py:2166 msgid "Stock item contains other items" -msgstr "" +msgstr "عنصر المخزون يحتوي أخرى عناصر" #: stock/models.py:2169 msgid "Stock item has been assigned to a customer" -msgstr "" +msgstr "عنصر المخزون لديه تم مسند إلى عميل" #: stock/models.py:2172 stock/models.py:2404 msgid "Stock item is currently in production" -msgstr "" +msgstr "عنصر المخزون هو حاليًا في الإنتاج" #: stock/models.py:2175 msgid "Serialized stock cannot be merged" -msgstr "" +msgstr "مسلسل مخزون لا يمكن يكون merged" #: stock/models.py:2182 stock/serializers.py:1577 msgid "Duplicate stock items" -msgstr "" +msgstr "نسخ عناصر المخزون" #: stock/models.py:2186 msgid "Stock items must refer to the same part" -msgstr "" +msgstr "عناصر المخزون يجب refer إلى ال نفس صنف" #: stock/models.py:2194 msgid "Stock items must refer to the same supplier part" -msgstr "" +msgstr "عناصر المخزون يجب refer إلى ال نفس صنف المورد" #: stock/models.py:2199 msgid "Stock status codes must match" -msgstr "" +msgstr "مخزون حالة رموز يجب مطابقة" #: stock/models.py:2558 msgid "StockItem cannot be moved as it is not in stock" -msgstr "" +msgstr "StockItem لا يمكن يكون moved بصفته هو هو غير في مخزون" #: stock/models.py:3070 msgid "Stock Item Tracking" -msgstr "" +msgstr "عنصر المخزون تتبع" #: stock/models.py:3120 msgid "Entry notes" -msgstr "" +msgstr "سجل ملاحظات" #: stock/models.py:3160 msgid "Stock Item Test Result" -msgstr "" +msgstr "عنصر المخزون نتيجة الاختبار" #: stock/models.py:3191 msgid "Value must be provided for this test" -msgstr "" +msgstr "يجب أن يكون القيمة مقدم لـ هذا اختبار" #: stock/models.py:3195 msgid "Attachment must be uploaded for this test" -msgstr "" +msgstr "يجب أن يكون المرفق تم الرفع لـ هذا اختبار" #: stock/models.py:3200 msgid "Invalid value for this test" -msgstr "" +msgstr "غير صالح قيمة لـ هذا اختبار" #: stock/models.py:3224 msgid "Test result" -msgstr "" +msgstr "نتيجة الاختبار" #: stock/models.py:3231 msgid "Test output value" -msgstr "" +msgstr "اختبار مخرج قيمة" #: stock/models.py:3239 stock/serializers.py:260 msgid "Test result attachment" -msgstr "" +msgstr "نتيجة الاختبار مرفق" #: stock/models.py:3243 msgid "Test notes" -msgstr "" +msgstr "اختبار ملاحظات" #: stock/models.py:3251 msgid "Test station" -msgstr "" +msgstr "اختبار station" #: stock/models.py:3252 msgid "The identifier of the test station where the test was performed" -msgstr "" +msgstr "ال معرف لـ ال اختبار station حيث ال اختبار كان performed" #: stock/models.py:3258 msgid "Started" -msgstr "" +msgstr "بدأ" #: stock/models.py:3259 msgid "The timestamp of the test start" -msgstr "" +msgstr "ال طابع زمني لـ ال اختبار بدء" #: stock/models.py:3265 msgid "Finished" @@ -9341,322 +9325,327 @@ msgstr "" #: stock/models.py:3266 msgid "The timestamp of the test finish" -msgstr "" +msgstr "ال طابع زمني لـ ال اختبار finish" #: stock/serializers.py:86 msgid "Generated batch code" -msgstr "" +msgstr "تم الإنشاء رمز الدفعة" #: stock/serializers.py:95 msgid "Select build order" -msgstr "" +msgstr "تحديد أمر الإنتاج" #: stock/serializers.py:104 msgid "Select stock item to generate batch code for" -msgstr "" +msgstr "تحديد عنصر المخزون إلى إنشاء رمز الدفعة لـ" #: stock/serializers.py:113 msgid "Select location to generate batch code for" -msgstr "" +msgstr "تحديد موقع إلى إنشاء رمز الدفعة لـ" #: stock/serializers.py:122 msgid "Select part to generate batch code for" -msgstr "" +msgstr "تحديد صنف إلى إنشاء رمز الدفعة لـ" #: stock/serializers.py:131 msgid "Select purchase order" -msgstr "" +msgstr "تحديد طلب الشراء" #: stock/serializers.py:138 msgid "Enter quantity for batch code" -msgstr "" +msgstr "إدخال كمية لـ رمز الدفعة" #: stock/serializers.py:164 msgid "Generated serial number" -msgstr "" +msgstr "تم الإنشاء الرقم التسلسلي" #: stock/serializers.py:174 msgid "Select part to generate serial number for" -msgstr "" +msgstr "تحديد صنف إلى إنشاء الرقم التسلسلي لـ" #: stock/serializers.py:182 msgid "Quantity of serial numbers to generate" -msgstr "" +msgstr "كمية الأرقام التسلسلية إلى إنشاء" #: stock/serializers.py:247 msgid "Test template for this result" -msgstr "" +msgstr "اختبار قالب لـ هذا نتيجة" #: stock/serializers.py:290 msgid "No matching test found for this part" -msgstr "" +msgstr "لا يوجد اختبار تم العثور لـ هذا صنف مطابق" #: stock/serializers.py:294 msgid "Template ID or test name must be provided" -msgstr "" +msgstr "يجب أن يكون قالب ID أو اختبار اسم مقدم" #: stock/serializers.py:304 msgid "The test finished time cannot be earlier than the test started time" -msgstr "" +msgstr "ال اختبار finished وقت لا يمكن يكون earlier من ال اختبار بدأ وقت" #: stock/serializers.py:432 msgid "Parent Item" -msgstr "" +msgstr "الأصل عنصر" #: stock/serializers.py:433 msgid "Parent stock item" -msgstr "" +msgstr "الأصل عنصر المخزون" #: stock/serializers.py:459 msgid "Use pack size when adding: the quantity defined is the number of packs" -msgstr "" +msgstr "استخدام حزمة حجم عند إضافة: ال كمية محدد هو ال رقم لـ packs" #: stock/serializers.py:461 msgid "Use pack size" -msgstr "" +msgstr "استخدام حزمة حجم" #: stock/serializers.py:468 stock/serializers.py:732 msgid "Enter serial numbers for new items" -msgstr "" +msgstr "إدخال الأرقام التسلسلية لـ جديد عناصر" #: stock/serializers.py:574 msgid "Supplier Part Number" -msgstr "" +msgstr "صنف المورد رقم" #: stock/serializers.py:655 users/models.py:183 msgid "Expired" -msgstr "" +msgstr "منتهي" #: stock/serializers.py:661 msgid "Child Items" -msgstr "" +msgstr "فرعي عناصر" #: stock/serializers.py:665 msgid "Tracking Items" -msgstr "" +msgstr "تتبع عناصر" #: stock/serializers.py:671 msgid "Purchase price of this stock item, per unit or pack" -msgstr "" +msgstr "سعر الشراء لـ هذا عنصر المخزون، per وحدة أو حزمة" #: stock/serializers.py:709 msgid "Enter number of stock items to serialize" -msgstr "" +msgstr "إدخال رقم لـ عناصر المخزون إلى ترقيم تسلسلي" #: stock/serializers.py:717 stock/serializers.py:760 stock/serializers.py:798 #: stock/serializers.py:936 msgid "No stock item provided" -msgstr "" +msgstr "لا عنصر المخزون مقدم" #: stock/serializers.py:725 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" -msgstr "" +msgstr "كمية يجب غير تجاوز متاح مخزون كمية ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" -msgstr "" +msgstr "الوجهة موقع المخزون" #: stock/serializers.py:763 msgid "Serial numbers cannot be assigned to this part" -msgstr "" +msgstr "الأرقام التسلسلية لا يمكن يكون مسند إلى هذا صنف" #: stock/serializers.py:783 msgid "Serial numbers already exist" -msgstr "" +msgstr "الأرقام التسلسلية بالفعل موجود" #: stock/serializers.py:833 msgid "Select stock item to install" -msgstr "" +msgstr "تحديد عنصر المخزون إلى تثبيت" #: stock/serializers.py:840 msgid "Quantity to Install" -msgstr "" +msgstr "كمية إلى تثبيت" #: stock/serializers.py:841 msgid "Enter the quantity of items to install" -msgstr "" +msgstr "إدخال ال كمية لـ عناصر إلى تثبيت" #: stock/serializers.py:846 stock/serializers.py:926 stock/serializers.py:1068 msgid "Add transaction note (optional)" -msgstr "" +msgstr "إضافة transaction ملاحظة (اختياري)" #: stock/serializers.py:854 msgid "Quantity to install must be at least 1" -msgstr "" +msgstr "يجب أن يكون كمية إلى تثبيت عند أقل 1" #: stock/serializers.py:862 msgid "Stock item is unavailable" -msgstr "" +msgstr "عنصر المخزون هو غير متاح" #: stock/serializers.py:873 msgid "Selected part is not in the Bill of Materials" -msgstr "" +msgstr "محدد صنف هو غير في ال قائمة المواد" #: stock/serializers.py:886 msgid "Quantity to install must not exceed available quantity" -msgstr "" +msgstr "كمية كمية إلى تثبيت يجب غير تجاوز متاح" #: stock/serializers.py:921 msgid "Destination location for uninstalled item" -msgstr "" +msgstr "الوجهة موقع لـ غير مثبت عنصر" #: stock/serializers.py:959 msgid "Select part to convert stock item into" -msgstr "" +msgstr "تحديد صنف إلى تحويل عنصر المخزون إلى" #: stock/serializers.py:972 msgid "Selected part is not a valid option for conversion" -msgstr "" +msgstr "محدد صنف هو غير صالح خيار لـ conversion" #: stock/serializers.py:989 msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" +msgstr "لا يمكن تحويل عنصر المخزون مع مسند SupplierPart" #: stock/serializers.py:1023 msgid "Stock item status code" -msgstr "" +msgstr "عنصر المخزون حالة رمز" #: stock/serializers.py:1052 msgid "Select stock items to change status" -msgstr "" +msgstr "تحديد حالة عناصر المخزون إلى تغيير" #: stock/serializers.py:1058 msgid "No stock items selected" -msgstr "" +msgstr "لا عناصر المخزون محدد" #: stock/serializers.py:1176 stock/serializers.py:1269 msgid "Sublocations" -msgstr "" +msgstr "مواقع فرعية" #: stock/serializers.py:1194 msgid "Delete Stock Items" -msgstr "" +msgstr "حذف عناصر المخزون" #: stock/serializers.py:1195 msgid "Delete all stock items contained within this location" -msgstr "" +msgstr "حذف الكل عناصر المخزون contained ضمن هذا موقع" #: stock/serializers.py:1200 msgid "Delete Sublocations" -msgstr "" +msgstr "حذف مواقع فرعية" #: stock/serializers.py:1201 msgid "Delete all sub-locations contained within this location" -msgstr "" +msgstr "حذف الكل sub-locations contained ضمن هذا موقع" #: stock/serializers.py:1264 msgid "Parent stock location" -msgstr "" +msgstr "الأصل موقع المخزون" #: stock/serializers.py:1402 msgid "Part must be salable" -msgstr "" +msgstr "يجب أن يكون الصنف قابل للبيع" #: stock/serializers.py:1406 msgid "Item is allocated to a sales order" -msgstr "" +msgstr "عنصر هو مخصص إلى طلب البيع" #: stock/serializers.py:1410 msgid "Item is allocated to a transfer order" -msgstr "" +msgstr "عنصر هو مخصص إلى طلب التحويل" #: stock/serializers.py:1414 msgid "Item is allocated to a build order" -msgstr "" +msgstr "عنصر هو مخصص إلى أمر الإنتاج" #: stock/serializers.py:1438 msgid "Customer to assign stock items" -msgstr "" +msgstr "عميل إلى إسناد عناصر المخزون" #: stock/serializers.py:1444 msgid "Selected company is not a customer" -msgstr "" +msgstr "محدد شركة هو غير عميل" #: stock/serializers.py:1452 msgid "Stock assignment notes" -msgstr "" +msgstr "مخزون assignment ملاحظات" #: stock/serializers.py:1462 stock/serializers.py:1759 msgid "A list of stock items must be provided" -msgstr "" +msgstr "يجب أن يكون قائمة لـ عناصر المخزون مقدم" #: stock/serializers.py:1541 msgid "Stock merging notes" -msgstr "" +msgstr "مخزون merging ملاحظات" #: stock/serializers.py:1546 msgid "Allow mismatched suppliers" -msgstr "" +msgstr "السماح mismatched موردون" #: stock/serializers.py:1547 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" +msgstr "السماح عناصر المخزون مع مختلف أصناف المورد إلى يكون merged" #: stock/serializers.py:1552 msgid "Allow mismatched status" -msgstr "" +msgstr "حالة السماح mismatched" #: stock/serializers.py:1553 msgid "Allow stock items with different status codes to be merged" -msgstr "" +msgstr "السماح عناصر المخزون مع مختلف حالة رموز إلى يكون merged" #: stock/serializers.py:1563 msgid "At least two stock items must be provided" -msgstr "" +msgstr "يجب أن يكون عند أقل two عناصر المخزون مقدم" #: stock/serializers.py:1630 msgid "No Change" -msgstr "" +msgstr "لا تغيير" #: stock/serializers.py:1668 msgid "StockItem primary key value" -msgstr "" +msgstr "StockItem أساسي مفتاح قيمة" #: stock/serializers.py:1681 msgid "Stock item is not in stock" -msgstr "" +msgstr "عنصر المخزون هو غير في مخزون" #: stock/serializers.py:1684 msgid "Stock item is already in stock" -msgstr "" +msgstr "عنصر المخزون هو بالفعل في مخزون" #: stock/serializers.py:1698 msgid "Quantity must not be negative" -msgstr "" +msgstr "كمية يجب غير يكون سالب" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" -msgstr "" +msgstr "دمج إلى موجود مخزون" #: stock/serializers.py:1730 msgid "Merge this item into existing stock at the destination if possible" -msgstr "" +msgstr "دمج هذا عنصر إلى موجود مخزون عند ال الوجهة إذا possible" #: stock/serializers.py:1749 msgid "Stock transaction notes" -msgstr "" +msgstr "مخزون transaction ملاحظات" #: stock/serializers.py:1778 msgid "Set stock location for counted items (optional)" -msgstr "" +msgstr "تعيين موقع المخزون لـ counted عناصر (اختياري)" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "هيكلي مواقع لا يمكن يكون مسند عناصر المخزون" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" -msgstr "" +msgstr "دمج مرتجع عناصر إلى موجود عناصر المخزون إذا possible" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" -msgstr "" +msgstr "Next الرقم التسلسلي" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" -msgstr "" +msgstr "Previous الرقم التسلسلي" #: stock/status_codes.py:11 msgid "OK" -msgstr "" +msgstr "موافق" #: stock/status_codes.py:12 msgid "Attention needed" @@ -9672,7 +9661,7 @@ msgstr "" #: stock/status_codes.py:15 msgid "Rejected" -msgstr "" +msgstr "مرفوض" #: stock/status_codes.py:19 msgid "Quarantined" @@ -9680,189 +9669,189 @@ msgstr "" #: stock/status_codes.py:44 msgid "Legacy stock tracking entry" -msgstr "" +msgstr "Legacy مخزون تتبع سجل" #: 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 "مخزون counted" #: 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 "Merged عناصر المخزون" #: stock/status_codes.py:79 msgid "Converted to variant" -msgstr "" +msgstr "Converted إلى متغير" #: 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 "صلاحية Denied" #: 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 "مصادقة Failure" #: 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 "ال requested صفحة يقوم غير موجود" #: 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 خادم raised داخلي خطأ" #: templates/500.html:12 msgid "Refer to the error log in the admin interface for further details" -msgstr "" +msgstr "تفاصيل Refer إلى ال خطأ سجل في ال مسؤول واجهة لـ further" #: templates/503.html:11 templates/503.html:15 msgid "Site is in Maintenance" -msgstr "" +msgstr "موقع هو في Maintenance" #: templates/503.html:17 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" +msgstr "ال موقع هو حاليًا في maintenance و ينبغي يكون أعلى مرة أخرى soon!" #: 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 "جهة اتصال الخاص بك نظام مسؤول النظام لـ further معلومات" #: 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 "هناك هي قيد الانتظار قاعدة بيانات ترحيلات الذي طلب attention" #: 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 خادم raised تهيئة خطأ" #: templates/email/build_order_completed.html:9 #: templates/email/canceled_order_assigned.html:9 @@ -9874,67 +9863,67 @@ 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 - building %(quantity)s x %(part)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 "أنت هي receiving هذا بريد إلكتروني because أنت هي مشتركة إلى إشعارات لـ هذا صنف" #: 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 "أنت هي receiving هذا بريد إلكتروني because أنت هي مشتركة إلى إشعارات لـ هذا صنف أو فئة ذلك هو هو صنف لـ" #: templates/email/stale_stock_notification.html:10 msgid "The following stock items are approaching their expiry dates:" -msgstr "" +msgstr "ال التالي عناصر المخزون هي approaching الخاص بهم انتهاء تواريخ:" #: 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 "أنت هي receiving هذا بريد إلكتروني because أنت هي مشتركة إلى إشعارات لـ هذه أصناف" #: 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:136 msgid "Personal info" @@ -9942,47 +9931,47 @@ msgstr "" #: users/admin.py:138 msgid "Permissions" -msgstr "" +msgstr "الصلاحيات" #: users/admin.py:141 msgid "Important dates" -msgstr "" +msgstr "Important تواريخ" #: users/authentication.py:30 users/models.py:149 msgid "Token has been revoked" -msgstr "" +msgstr "رمز وصول لديه تم revoked" #: users/authentication.py:33 msgid "Token has expired" -msgstr "" +msgstr "رمز وصول لديه منتهي" #: users/models.py:92 msgid "API Token" -msgstr "" +msgstr "واجهة API رمز وصول" #: users/models.py:93 msgid "API Tokens" -msgstr "" +msgstr "واجهة API رموز وصول" #: users/models.py:129 msgid "Token Name" -msgstr "" +msgstr "رمز وصول اسم" #: users/models.py:130 msgid "Custom token name" -msgstr "" +msgstr "مخصص رمز وصول اسم" #: users/models.py:136 msgid "Token expiry date" -msgstr "" +msgstr "تاريخ رمز وصول انتهاء" #: users/models.py:144 msgid "Last Seen" -msgstr "" +msgstr "آخر Seen" #: users/models.py:145 msgid "Last time the token was used" -msgstr "" +msgstr "آخر وقت ال رمز وصول كان مستخدم" #: users/models.py:149 msgid "Revoked" @@ -9990,39 +9979,39 @@ msgstr "" #: users/models.py:225 msgid "Permission set" -msgstr "" +msgstr "صلاحية تعيين" #: users/models.py:238 msgid "View" -msgstr "" +msgstr "عرض" #: users/models.py:238 msgid "Permission to view items" -msgstr "" +msgstr "صلاحية إلى عرض عناصر" #: users/models.py:242 msgid "Add" -msgstr "" +msgstr "إضافة" #: users/models.py:242 msgid "Permission to add items" -msgstr "" +msgstr "صلاحية إلى إضافة عناصر" #: users/models.py:246 msgid "Change" -msgstr "" +msgstr "تغيير" #: users/models.py:248 msgid "Permissions to edit items" -msgstr "" +msgstr "صلاحيات إلى تعديل عناصر" #: users/models.py:252 msgid "Delete" -msgstr "" +msgstr "حذف" #: users/models.py:254 msgid "Permission to delete items" -msgstr "" +msgstr "صلاحية إلى حذف عناصر" #: users/models.py:491 msgid "Bot" @@ -10030,7 +10019,7 @@ msgstr "" #: users/models.py:492 msgid "Internal" -msgstr "" +msgstr "داخلي" #: users/models.py:494 msgid "Guest" @@ -10038,35 +10027,35 @@ msgstr "" #: users/models.py:503 msgid "Language" -msgstr "" +msgstr "اللغة" #: users/models.py:504 msgid "Preferred language for the user" -msgstr "" +msgstr "Preferred لغة لـ ال مستخدم" #: users/models.py:509 msgid "Theme" -msgstr "" +msgstr "المظهر" #: users/models.py:510 msgid "Settings for the web UI as JSON - do not edit manually!" -msgstr "" +msgstr "إعدادات لـ ال ويب UI بصفته JSON - تنفيذ غير تعديل يدويًا!" #: users/models.py:515 msgid "Widgets" -msgstr "" +msgstr "عناصر واجهة" #: users/models.py:517 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" -msgstr "" +msgstr "إعدادات لـ ال لوحة المعلومات عناصر واجهة بصفته JSON - تنفيذ غير تعديل يدويًا!" #: users/models.py:524 msgid "Display Name" -msgstr "" +msgstr "عرض اسم" #: users/models.py:525 msgid "Chosen display name for the user" -msgstr "" +msgstr "Chosen عرض اسم لـ ال مستخدم" #: users/models.py:531 msgid "Position" @@ -10074,31 +10063,31 @@ msgstr "" #: users/models.py:532 msgid "Main job title or position" -msgstr "" +msgstr "Main job عنوان أو position" #: users/models.py:539 msgid "User status message" -msgstr "" +msgstr "مستخدم حالة رسالة" #: users/models.py:546 msgid "User location information" -msgstr "" +msgstr "مستخدم موقع معلومات" #: users/models.py:551 msgid "User is actively using the system" -msgstr "" +msgstr "مستخدم هو actively باستخدام ال نظام" #: users/models.py:558 msgid "Preferred contact information for the user" -msgstr "" +msgstr "Preferred جهة اتصال معلومات لـ ال مستخدم" #: users/models.py:564 msgid "User Type" -msgstr "" +msgstr "مستخدم نوع" #: users/models.py:565 msgid "Which type of user is this?" -msgstr "" +msgstr "الذي نوع لـ مستخدم هو هذا؟" #: users/models.py:571 msgid "Organisation" @@ -10106,111 +10095,111 @@ msgstr "" #: users/models.py:572 msgid "Users primary organisation/affiliation" -msgstr "" +msgstr "مستخدمون أساسي organisation/affiliation" #: users/models.py:580 msgid "Primary Group" -msgstr "" +msgstr "أساسي مجموعة" #: users/models.py:581 msgid "Primary group for the user" -msgstr "" +msgstr "أساسي مجموعة لـ ال مستخدم" #: users/ruleset.py:28 msgid "Admin" -msgstr "" +msgstr "مسؤول" #: users/ruleset.py:31 msgid "Bills of Material" -msgstr "" +msgstr "Bills لـ Material" #: users/ruleset.py:35 msgid "Purchase Orders" -msgstr "" +msgstr "طلبات الشراء" #: users/ruleset.py:36 msgid "Sales Orders" -msgstr "" +msgstr "طلبات البيع" #: users/ruleset.py:37 msgid "Return Orders" -msgstr "" +msgstr "طلبات الإرجاع" #: users/ruleset.py:38 msgid "Transfer Orders" -msgstr "" +msgstr "طلبات التحويل" #: users/serializers.py:186 msgid "Username" -msgstr "" +msgstr "اسم المستخدم" #: users/serializers.py:189 msgid "First Name" -msgstr "" +msgstr "أول اسم" #: users/serializers.py:189 msgid "First name of the user" -msgstr "" +msgstr "أول اسم لـ ال مستخدم" #: users/serializers.py:193 msgid "Last Name" -msgstr "" +msgstr "آخر اسم" #: users/serializers.py:193 msgid "Last name of the user" -msgstr "" +msgstr "آخر اسم لـ ال مستخدم" #: users/serializers.py:197 msgid "Email address of the user" -msgstr "" +msgstr "بريد إلكتروني عنوان لـ ال مستخدم" #: users/serializers.py:240 msgid "User must be authenticated" -msgstr "" +msgstr "يجب أن يكون المستخدم authenticated" #: users/serializers.py:249 msgid "Only a superuser can create a token for another user" -msgstr "" +msgstr "فقط مستخدم فائق يمكن إنشاء رمز وصول لـ آخر مستخدم" #: users/serializers.py:329 msgid "Administrator" -msgstr "" +msgstr "مسؤول النظام" #: users/serializers.py:330 msgid "Does this user have administrative permissions" -msgstr "" +msgstr "يقوم هذا مستخدم لديه administrative صلاحيات" #: users/serializers.py:335 users/serializers.py:424 msgid "Superuser" -msgstr "" +msgstr "مستخدم فائق" #: users/serializers.py:335 users/serializers.py:425 msgid "Is this user a superuser" -msgstr "" +msgstr "هو هذا مستخدم مستخدم فائق" #: users/serializers.py:339 users/serializers.py:432 msgid "Is this user account active" -msgstr "" +msgstr "هو هذا حساب المستخدم نشط" #: users/serializers.py:351 msgid "Only a superuser can adjust this field" -msgstr "" +msgstr "فقط مستخدم فائق يمكن تسوية هذا حقل" #: users/serializers.py:379 msgid "Password" -msgstr "" +msgstr "كلمة المرور" #: users/serializers.py:380 msgid "Password for the user" -msgstr "" +msgstr "كلمة المرور لـ ال مستخدم" #: users/serializers.py:386 msgid "Override warning" -msgstr "" +msgstr "تجاوز تحذير" #: users/serializers.py:387 msgid "Override the warning about password rules" -msgstr "" +msgstr "تجاوز ال تحذير حول كلمة المرور rules" #: users/serializers.py:417 msgid "Staff" @@ -10218,21 +10207,21 @@ msgstr "" #: users/serializers.py:418 msgid "Does this user have staff permissions" -msgstr "" +msgstr "يقوم هذا مستخدم لديه staff صلاحيات" #: users/serializers.py:468 msgid "You do not have permission to create users" -msgstr "" +msgstr "أنت تنفيذ غير لديه صلاحية إلى إنشاء مستخدمون" #: users/serializers.py:489 msgid "Your account has been created." -msgstr "" +msgstr "الخاص بك حساب لديه تم تم الإنشاء." #: users/serializers.py:491 msgid "Please use the password reset function to login" -msgstr "" +msgstr "يرجى استخدام ال كلمة المرور إعادة تعيين دالة إلى تسجيل الدخول" #: users/serializers.py:497 msgid "Welcome to InvenTree" -msgstr "" +msgstr "Welcome إلى InvenTree" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index cb85a2093f..4cf68482bf 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -89,7 +89,7 @@ msgstr "Преобразуването на {original} в {unit} не беше #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" @@ -97,16 +97,16 @@ msgstr "Въведена е недопустима стойност" msgid "Error details can be found in the admin panel" msgstr "Подробности за грешката могат да се намерят в администраторския панел" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Въведи дата" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "" @@ -334,7 +334,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Потребител" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Цялостна наличност" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index b9fb47e98b..8ae48c4873 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -89,7 +89,7 @@ msgstr "Nelze převést {original} na {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" @@ -97,16 +97,16 @@ msgstr "Vyplněno neplatné množství" msgid "Error details can be found in the admin panel" msgstr "Podrobnosti o chybě lze nalézt v panelu administrace" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Zadejte datum" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Neplaté desetinné číslo" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referenční číslo je příliš velké" msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Název" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Popis" msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Cesta" @@ -334,7 +334,7 @@ msgstr "Chyba serveru" msgid "An error has been logged by the server." msgstr "Server zaznamenal chybu." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Obrazek" msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" @@ -373,6 +373,46 @@ msgstr "Typ obsahu nenalezen" msgid "Content type does not match required mixin class" msgstr "Typ obsahu neodpovídá požadované třídě mixinu" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Kopírovat parametry" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Kopírovat řádky" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Kopírovat řádkové položky z původní objednávky" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Kopírovat extra řádky" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Kopírovat extra řádkové položky z původní objednávky" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabština" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Neplatný kód měny" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Stav objednávky" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Nadřazená sestava" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Zahrnout varianty" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Zahrnout varianty" msgid "Part" msgstr "Díl" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategorie" @@ -661,125 +701,126 @@ msgstr "Vyloučit strom" msgid "Build must be cancelled before it can be deleted" msgstr "Sestavení musí být zrušeno před odstraněním" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Volitelné" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Sestava" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Sledováno" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testovatelné" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Objednávka nevyřízená" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Spotřebováno" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Na objednávku" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "Sestava nenalezena" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 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:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Lokace" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Výstup" -#: build/api.py:1107 +#: build/api.py:1120 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:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Výrobní příkazy" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Kusovník sestavy ještě nebyl schválen" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Výrobní příkaz nesmí být vytvořen pro neaktivní díl" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Výrobní příkaz nemůže být vytvořen pro odemčený díl" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Výrobní příkaz může být externě splněn pouze pro nakupovatelné díly" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Musí být specifikován odpovědný uživatel nebo skupina" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Díl výrobního příkazu nelze změnit" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Cílové datum musí být po datu zahájení" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Referenční číslo výrobního příkazu" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Referenční číslo výrobního příkazu" msgid "Reference" msgstr "Reference" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Stručný popis sestavení (nepovinné)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Výrobní příkaz, kterému je tato stavba přiřazena" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Vyber téma, které chceš stavět" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referenční číslo prodejní objednávky" -#: build/models.py:297 +#: build/models.py:294 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:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Zdrojové umístění" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vyberte lokaci, ze které chcete brát zásoby pro sestavu (nechte prázdné, chcete-li brát zásoby z libovolné lokace)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Externí sestavení" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Tento výrobní příkaz je plněn externě" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Cílová lokace" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Vyberte lokaci, kde budou dokončené položky uloženy" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Množství sestav" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Počet skladových položek k sestavení" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Dokončené položky" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Počet skladových položek, které byly dokončeny" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Stav sestavení" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Datum vytvoření" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Datum zahájení sestavení" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Plánované datum zahájení této objednávky" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Cílové datum dokončení" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cílové datum dokončení sestavení. Sestavení bude po tomto datu v prodlení." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Datum dokončení" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "dokončil" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Vystavil" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Uživatel, který vystavil tento výrobní příkaz" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpovědný" -#: build/models.py:420 +#: build/models.py:417 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:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Odkaz na externí URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Priorita sestavení" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Priorita tohoto výrobního příkazu" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Kód projektu" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Kód projektu pro tento výrobní příkaz" -#: build/models.py:696 +#: build/models.py:693 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:701 +#: build/models.py:698 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:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Výstup neodpovídá výrobnímu příkazu" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 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:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "Přiřazené skladové položky jsou stále ve výrobě" -#: build/models.py:1151 +#: build/models.py:1136 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:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Řádková položka výrobního příkazu" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Vytvořit objekt" msgid "Quantity" msgstr "Množství" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Vyžadované množství pro výrobní příkaz" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Množství spotřebovaných zásob" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Vybraná skladová položka neodpovídá řádku kusovníku" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "Přiřazené množství musí být vyšší než nula" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Cílová skladová položka" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Úroveň sestavení" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Název dílu" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:237 +#: build/serializers.py:260 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:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Zadejte sériová čísla pro sestavení výstupů" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Skladové umístění pro výstup sestavy" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Musí být uveden seznam výstupů sestavy" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Skladové umístění pro sešrotované výstupy" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Zahodit alokace" -#: build/serializers.py:495 +#: build/serializers.py:530 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:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Důvod vyřazení výstupu(ů) sestavy" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Umístění dokončených výstupů sestavy" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Přijmout neúplné přidělení" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Spotřebovat přidělené zásoby" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Odstranit neúplné výstupy" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Není povoleno" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Přijmout jako spotřebované tímto výrobním příkazem" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Uvolnit před dokončením tohoto výrobního příkazu" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Nadměrně přidělené zásoby" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Některé skladové položky byly nadměrně přiděleny" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Přijmout nepřidělené" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Požadované zásoby nebyly plně přiděleny" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Přijmout neúplné" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Požadované množství sestavy nebylo dokončeno" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "Výrobní příkaz má otevřené podpříkazy" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Výrobní příkaz musí být ve stavu produkce" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Výrobní příkaz má neúplné výstupy" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Linka sestavy" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Výstup sestavy" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Výstup sestavy musí odkazovat na stejnou sestavu" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Řádková položka sestavy" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupné množství ({q}) překročeno" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Položky přidělení musí být poskytnuty" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Vyloučit skladové položky z tohoto vybraného umístění" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Zaměnitelné zásoby" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Náhradní zásoby" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Povolit přidělování náhradních dílů" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1060 +#: build/serializers.py:1073 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:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "Všechny položky" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "Nesledované položky" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "Sledované položky" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "Typ položky" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "Vyberte typ položky pro automatické přiřazení" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "Priorita zásob" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "Upřednostňované pořadí ve kterém jsou spotřebovávány odpovídající zásoby" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "Linky sestavy" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "Omezit přiřazení na tyto sestavné linky (nechte prázdné pro přidělení všech linek)" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Reference v kusovníku" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID dílu kusovníku" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Název dílu kusovníku" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "Informace instalace" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Sestavení" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Díl dodavatele" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Přidělené množství" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Reference sestavení" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Název kategorie dílů" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Sledovatelné" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Položka kusovníku" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Naplánováno na sestavení" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Externí zásoby" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Dostupné zásoby" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Dostupné náhradní zásoby" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Dostupná varianta skladu" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "Spotřebované množství přesahuje přidělené množství" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Nepovinné poznámky ke spotřebě zásob" -#: build/serializers.py:1762 +#: build/serializers.py:1775 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:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Duplikovat přidělení položky sestavení" -#: build/serializers.py:1785 +#: build/serializers.py:1798 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:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Duplikovat přiřazení výrobní linky" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Musí být poskytnuta alespoň jedna linka nebo předmět" @@ -1584,7 +1620,7 @@ msgstr "Tagy" msgid "Project Code Label" msgstr "Popisek kódu projektu" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Aktualizováno" @@ -1608,9 +1644,9 @@ msgstr "Jedinečný kód projektu" msgid "Project description" msgstr "Popis projektu" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Hodnota neprošla kontrolou platnosti" msgid "Key string must be unique" msgstr "Klíčový text musí být jedinečný" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Uživatel" msgid "Price break quantity" msgstr "Množství cenové slevy" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Cena" @@ -1679,560 +1715,560 @@ msgstr "Cena" msgid "Unit price at specified quantity" msgstr "Jednotková cena při stanoveném množství" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Koncový bod" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Koncový bod, ve kterém je tento webhook přijímán" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Název tohoto webhooku" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Je tento webhook aktivní" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token pro přístup" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Tajný klíč" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Sdílený tajný klíč pro HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID zprávy" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Unikátní identifikátor pro tuto zprávu" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Hostitel" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Hostitel, od kterého byla tato zpráva přijata" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Záhlaví" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Záhlaví této zprávy" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Tělo" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Tělo zprávy" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Koncový bod, na kterém byla zpráva přijata" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Pracoval na" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Byla práce na této zprávě dokončena?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "ID" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Název" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Odkaz" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Zveřejněno" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Souhrn" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Přečteno" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Byla tato novinka přečtena?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Soubor obrázku" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Cílový typ modelu pro tento obrázek" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "Cílové ID modelu pro tento obrázek" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Vlastní jednotka" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Symbol jednotky musí být unikátní" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Název jednotky musí být platný identifikátor" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Název jednotky" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Volitelný symbol jednotky" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definice" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definice jednotky" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Příloha" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Chybějící soubor" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "Žádný přiložený soubor k přejmenování" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "Název souboru nemůže být prázdný" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "Neplatný název souboru" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "Nelze změnit příponu souboru" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "Soubor s tímto názvem již existuje" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "Chyba při ukládání přejmenovaného souboru" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Cílový typ modelu pro obrázek" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Vyberte soubor k přiložení" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "Miniatura" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "Miniatura pro tuto přílohu" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Komentář" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Komentář přílohy" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Datum nahrání" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Datum, kdy byl soubor nahrán" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "Je obrázek" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "Pravda, pokud je tato příloha platným obrázkem" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Velikost souboru" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Velikost souboru v bytech" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Uveden neplatný typ modelu pro přílohu" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Vlastní stav" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Vlastní stavy" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Nastavení referenčního stavu" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Stav nastavený, který je prodloužen tímto vlastním stavem" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logický klíč" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Logický klíč statusu, který je rovný tomuto vlastnímu statusu v podnikové logice" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Hodnota" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Číselná hodnota, která bude uložena v databázi modelů" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Název stavu" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Popisek" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Štítek, který bude zobrazen na webu" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Barva" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Barva, která bude zobrazena ve frontendu" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Model, ke kterému je tento stav přiřazen" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Musí být vybrán model" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Musí být vybrán klíč" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Musí být vybrán logický klíč" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "Klíč se musí lišit od logického klíče" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Musí být uvedena platná referenční třída statusu" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "Klíč se musí lišit od logických klíčů referenčního statusu" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Název se musí lišit od názvů referenčního statusu" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Výběrové pole" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Výběrová pole" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Název výběrového pole" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Popis výběrového pole" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Uzamčeno" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Je tento seznam výběrů uzamčen?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Může být tento seznam výběru použit?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Zdrojový plugin" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Plugin, který poskytuje seznam výběru" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Zdrojový řetězec" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Volitelný řetězec identifikující zdroj použitý pro tento seznam" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Výchozí položka" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Výchozí položka pro tento seznam výběru" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Vytvořeno" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Datum a čas vytvoření výběrového seznamu" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Poslední aktualizace" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Datum a čas poslední aktualizace výběrového seznamu" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Položka seznamu výběrů" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Položky seznamu výběrů" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Seznam výběru, do kterého tato položka patří" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Název výběrového seznamu" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Popisek pro výběr seznamu" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Popis vstupu výběrového seznamu" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Je tento výběr výběrového listu aktivní?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Šablona parametru" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Šablona parametru" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Parametry zaškrtávacího pole nemohou mít jednotky" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Parametry zaškrtávacího pole nemohou mít výběr" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Volby musí být jedinečné" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Název šablony parametru musí být jedinečný" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Cílový typ modelu pro šablonu tohoto parametru" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Název parametru" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Jednotky" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Fyzické jednotky pro tento parametr" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Popis parametru" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Zaškrtávací políčko" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Je tento parametr zaškrtávací políčko?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Volby" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Platné volby pro tento parametr (oddělené čárkami)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Seznam výběru pro tento parametr" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Povoleno" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Je šablona tohoto parametru povolena?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Parametr" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Parametry" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Neplatný typ modelu pro daný parametr" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "ID modelu" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "ID cílového modelu pro tento parametr" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Šablona" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Šablona parametru" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Data" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Hodnota parametru" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Hodnota parametru" msgid "Note" msgstr "Poznámka" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Volitelné pole pro poznámku" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Sken čárového kódu" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Data čárového kódu" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Uživatel, který naskenoval čárový kód" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Časová značka" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Datum a čas skenování čárového kódu" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Koncový bod URL, který zpracoval čárový kód" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Kontextová data pro skenov čárového kódu" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Odpověď" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Data z odezvy z čárového kódu" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Výsledek" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Bylo skenování čárového kódu úspěšné?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Vyskytla se chyba" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Odstranení Emailového logu je chráněno. Nastavte INVENTREE_PROTECT_EMAIL_LOG na False pro užmožnění odstranění." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "E-mailová zpráva" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "E-mailové zprávy" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Oznámeno" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Odesláno" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Selhalo" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Doručeno" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Potvrzeno" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Příchozí" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Odchozí" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Bez odpovědi" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Sledovat doručení" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Sledovat přečtení" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Sledovat kliknutí" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "Globální ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifikátor pro tuto zprávu (může být poskytnut externím systémem)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "ID vlákna" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifikátor pro toto vlákno (může být poskytnut externím systémem)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Vlákno" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Vlákno propojeno k této zprávě" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Priorita" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "Emailové vlákno" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "Emailové vlákna" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Klíč" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unikátní klíč pro toto vlákno (použitý k identifikaci vlákna)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Unikátní identifikátor pro toto vlákno" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Začato interně" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Bylo toto vlákno započato interně?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Datum a čas kdy bylo vlákno vytvořeno" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Datum a čas kdy bylo vlákno naposledy aktualizováno" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponent" @@ -2932,7 +2968,7 @@ msgstr "Komponent" msgid "Parts can be used as sub-components by default" msgstr "Díly lze ve výchozím nastavení použít jako dílčí komponenty" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Možné zakoupit" @@ -2940,7 +2976,7 @@ msgstr "Možné zakoupit" msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Prodejné" @@ -2952,7 +2988,7 @@ msgstr "Díly jsou prodejné ve výchozím nastavení" msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Nehmotné (virtuální)" @@ -4215,8 +4251,8 @@ msgstr "Interní díl je aktivní" msgid "Supplier is Active" msgstr "Dodavatel je aktivní" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Výrobce" @@ -4406,7 +4442,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Výrobce dílu" @@ -4424,8 +4460,8 @@ msgstr "Zvolte díl" msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Dodavatel" msgid "Select supplier" msgstr "Vyberte dodavatele" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Skladová evidence dodavatele" @@ -4493,15 +4529,15 @@ msgstr "Adresa URL pro odkaz na externí díl dodavatele" msgid "Supplier part description" msgstr "Popis dílu dodavatele" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "základní cena" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Balení" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "více" @@ -4542,31 +4578,31 @@ msgstr "Datum poslední aktualizace údajů o dostupnosti" msgid "Supplier Price Break" msgstr "Cenová sleva dodavatele" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Výchozí měna používaná pro tohoto dodavatele" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Jméno společnosti" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Skladem" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Množstevní sleva" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "Hezké jméno" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Při exportu dat došlo k chybě" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Plugin pro export dat vrátil nesprávný formát dat" @@ -4735,11 +4771,11 @@ msgstr "Index řádku" msgid "Original row data" msgstr "Původní data řádku" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Chyby" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Platné" @@ -4899,55 +4935,55 @@ msgstr "Umístění tiskárny" msgid "Scope the printer to a specific location" msgstr "Určení rozsahu tiskárny na konkrétní místo" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Název zařízení" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Typ zařízení" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Typ zařízení" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Ovladač" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Ovladač používaný pro toto zařízení" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Zařízení mohou být vypnuty" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Ovladač k dispozici" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Žádné chyby" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Zahájeno" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Stav zařízení" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Zařízení" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Nastavení žařízení" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Typ nastavení" @@ -5066,7 +5102,7 @@ msgstr "Objednávka" msgid "Order Complete" msgstr "Objednávka byla dokončena" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Interní díl" @@ -5124,11 +5160,11 @@ msgstr "Celková cena" msgid "Total price for this order" msgstr "Celková cena za tuto objednávku" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Měna objednávky" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Měna pro tuto objednávku (nechte prázdné pro použití výchozí hodnoty společnosti)" @@ -5168,7 +5204,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:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cílené datum" @@ -5477,8 +5513,8 @@ msgstr "Kontroloval(a)" msgid "User who checked this shipment" msgstr "Uživatel, který zkontroloval tuto zásilku" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Doprava" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Množství musí být 1 pro serializovanou skladovou položku" @@ -5685,39 +5721,7 @@ msgstr "převedené množství" msgid "Transfer Order Allocation" msgstr "Přidělení převodního příkazu" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID objednávky" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID objednávky k duplikaci" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Kopírovat řádky" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Kopírovat řádkové položky z původní objednávky" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Kopírovat extra řádky" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Kopírovat extra řádkové položky z původní objednávky" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Kopírovat parametry" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "Kopírovat parametry objednávky z původní objednávky" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "Kopírovat parametry objednávky z původní objednávky" msgid "Line Items" msgstr "Řádkové položky" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Dokončené řádky" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "Vlastní stavový klíč" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "Aktualizovat stav objednávky na vlastní hodnotu pro tuto logickou hodnotu" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Duplikovat objednávku" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Specifikujte možnosti pro duplikaci této objednávky" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "Vlastní stavový klíč musí být celé číslo" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "Neplatný vlastní stavový klíč" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "Neplatný vlastní stavový klíč pro stav této objednávky" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Neplatné ID objednávky" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Název dodavatele" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Objednávku nelze zrušit" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Objednávka má nedokončené řádkové položky" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Objednávka není otevřena" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Automatická cena" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Měna nákupní ceny" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Sloučit položky" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Interní číslo dílu" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Interní název dílu" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Objednávka musí být zadána" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Řádková položka" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Vyberte cílové umístění pro přijaté položky" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Zadat kód šarže pro příchozí skladové položky" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Datum expirace" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Zadejte datum expirace pro příchozí skladové položky" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Zadat sériová čísla pro příchozí skladové položky" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Přepsat informace o obalu pro příchozí skladové položky" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Dodatečná poznámka pro příchozí skladové položky" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Čárový kód" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Naskenovaný čárový kód" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Tento čárový kód se již používá" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Musí být uvedeny řádkové položky" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Místo určení musí být specifikováno" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Hodnoty dodaných čárových kódů musí být unikátní" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Zásilky" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Dokončené zásilky" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "Přidělené řádky" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Měna prodejní ceny" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Přidělené položky" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Nebyly poskytnuty žádné údaje o zásilce" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 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:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Množství musí být kladné" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "Skladová položka neprošla všemi požadovanými testy" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Zadejte sériová čísla pro přidělení" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Zásilka již byla odeslána" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Zásilka není spojena s touto objednávkou" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Nebyla nalezena žádná shoda pro následující sériová čísla" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Následující sériová čísla nejsou k dispozici" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "Skladové místo, odkud mají být položky získávány (nechce prázdné pro jakékoliv)" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "Vyloučit zásoby z této lokace" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "Přiřadit přiřazení k této zásilce" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "Povolit odebrání zásob z více míst k naplnění jedné položky" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "Serializované zásoby" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "Určuje zda serializované zásoby jsou zahrnuty do automatického přiřazení" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "Omezit přiřazení na tyto linkové položky (nechte prázdné pro přidělení všech linek)" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "Linková položka nepatří k této objednávce" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Řádkový předmět vratky" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Řádková položka neodpovídá vratce" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Řádková položka již byla přijata" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Množství k vrácení" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Měna ceny řádku" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "Povolit dokončit příkaz s neúplnými alokacemi" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "Příkaz má neúplné alokace" @@ -6145,59 +6137,59 @@ msgstr "Má revize" msgid "BOM Valid" msgstr "Kusovník schválen" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Kaskádové kategorie" -#: part/api.py:996 +#: part/api.py:998 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:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrovat podle numerického ID kategorie nebo doslovného 'null'" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "Sestavený díl je aktivní" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "Sestavený díl je sledovatelný" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Sestavený díl je testovatelný" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "Sestavený díl je uzamčen" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "Kompotenta je aktivní" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "Komponenta je sledovatelná" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Díl komponenty je testovatelný" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "Komponenta je část sestavy" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "Komponenta je virtuální" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "Má dostupné zásoby" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Využití" @@ -6210,7 +6202,7 @@ msgstr "Kategorie dílu" msgid "Part Categories" msgstr "Kategorie dílů" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Výchozí umístění" @@ -6259,656 +6251,660 @@ msgstr "Výchozí hodnota" msgid "Default Parameter Value" msgstr "Výchozí hodnota parametru" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Díly" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Nelze odstranit parametry zamčeného dílu" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Nelze upravit parametry zamčeného dílu" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Tento díl nelze smazat, protože je uzamčen" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Tento díl nelze odstanit, protože je stále aktivní" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Tento díl nelze odstranit, protože je použit v sestavě" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Díl '{self}' nelze použít v kusovníku '{parent}' (rekurzivní)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Díl '{parent}' je využit v kusovníku '{self}' (rekurzivní)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN musí odpovídat regex vzoru {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Díl nemůže být revize same sebe" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "Kód revize musí být specifikován pro díl označený jako revize" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Revize jsou povoleny pouze pro sestavy" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Nelze provést revizi šablony" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "Nadřazený díl musí odkazovat na stejnou šablonu" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Skladová položka s tímto sériovým číslem již existuje" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplicitní IPN není povoleno v nastavení dílu" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Duplicitní díl revize již existuje." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Díl s tímto názvem, IPN a revizí již existuje." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Díly nemohou být přiřazeny do strukturálních kategorií!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Název dílu" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Je šablonou" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Je tento díl šablona?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Je tento díl varianta jiného dílu?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Varianta" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Popis dílu (nepovinné)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Klíčová slova" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Klíčová slova dílu pro zlepšení vyhledávání" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interní číslo dílu (IPN)" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Číslo revize nebo verze dílu" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revize" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Je tento díl revizí jiného dílu?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revize" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Kde je tato položka obvykle skladněna?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Výchozí expirace" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Expirační čas (ve dnech) pro zásoby tohoto dílu" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimální zásoby na skladě" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimální povolená úroveň zásob" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "Maximální zásoby" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "Maximální povolená úroveň zásob" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Měrné jednotky pro tento díl" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Lze tento díl sestavit z jiných dílů?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Lze tento díl použít k sestavení jiných dílů?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Lze u tohoto dílu sledovat jednotlivé položky?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Může mít tento díl zaznamenány výsledky testu?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Může být tento díl zakoupen od externích dodavatelů?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Lze tento díl prodávat zákazníkům?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Je tento díl aktivní?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Uzamčené díly nelze upravit" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Je to virtuální díl, například softwarový produkt nebo licence?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "Kusovník ověřen" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Je kusovník pro tuto část platný?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "Kontrolní součet kusovníku" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Uložený kontrolní součet kusovníku" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Kusovník zkontroloval" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Datum kontroly kusovníku" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Vytváření uživatele" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Vlastník odpovědný za tento díl" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Prodat více" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Měna použitá pro výpočet cen v mezipaměti" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimální cena kusovníku" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Minimální cena komponent dílu" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maximální cena kusovníku" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Maximální cena komponent dílu" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimální nákupní cena" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Minimální historická nákupní cena" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maximální nákupní cena" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Maximální historická nákupní cena" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimální interní cena" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Minimální cena závislá na množstevní slevě" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maximální interní cena" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Maximální cena závislá na množstevní slevě" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Minimální cena dodavatele" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Minimální cena dílu od externích dodavatelů" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Maximální cena dodavatele" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Maximální cena dílu od externích dodavatelů" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Minimální cena variant" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Vypočítané minimální náklady na varianty dílů" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Maximální cena variant" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Vypočítané maximální náklady na varianty dílů" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimální cena" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Přepsat minimální náklady" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maximální cena" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Přepsat maximální náklady" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Vypočítané minimální celkové náklady" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Vypočítané maximální celkové náklady" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Minimální prodejní cena" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Minimální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Maximální prodejní cena" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Maximální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Minimální prodejní cena" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Minimální historická prodejní cena" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Maximální prodejní cena" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Maximální historická prodejní cena" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Díl na inventuru" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Počet položek" -#: part/models.py:3536 +#: part/models.py:3540 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:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Celkové dostupné zásoby v době inventury" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Datum" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Datum provedení inventury" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Minimální cena zásob" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Odhadovaná minimální cena zásob k dispozici" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maximální cena zásob" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Odhadovaná maximální cena zásob k dispozici" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Částeční sleva v ceně" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Šablona testu položky" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "Zkušební šablony lze vytvořit pouze pro testovatelné části" -#: part/models.py:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Název testu" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Zadejte název testu" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Testovací klíč" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Zjednodušený klíč pro testování" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Popis testu" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Zadejte popis pro tento test" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Je tento test povolen?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Požadováno" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Je tato zkouška vyžadována k projití?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Požadovaná hodnota" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Vyžaduje přílohu" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Platné volby pro tento test (oddělené čárkami)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "Neplatné množství - nebyly zadány žádné jedotky pro tento díl" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "Množství musí být větší nebo rovno nule" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "Položku kusovníku nelze změnit - sestava je uzamčena" -#: part/models.py:4084 +#: part/models.py:4088 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:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Poddílec" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Vyberte díl které bude použit v kusovníku" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "Množství" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "Množství pod-dílů spotřebované při výrobě jednoho dílu" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Kusovníkové množství pro tuto kusovníkovou položku" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Tato položka kusovníku je nepovinná" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Nastavit množství" -#: part/models.py:4145 +#: part/models.py:4149 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:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Přirozené ztráty" -#: part/models.py:4155 +#: part/models.py:4159 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:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Zaokrouhlení více" -#: part/models.py:4168 +#: part/models.py:4172 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:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Reference položky kusovníku" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Poznámky k položce kusovníku" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Kontrolní součet" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Kontrolní součet řádku kusovníku" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Schváleno" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Tato položka kusovníku ještě nebyla schválena" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Se zdědí" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Množství musí být celé číslo pro sledovatelné díly" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Poddíl musí být specifikován" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Náhradní položka kusovníku" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Nadřazená položka kusovníku" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Náhradní díl" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Díl 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Díl 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Vyberte související díl" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Poznámka pro tento vztah" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Duplicitní vztah již existuje" @@ -6956,331 +6952,319 @@ msgstr "Nákupní měna této skladové položky" msgid "File is not an image" msgstr "Soubor není obrázek" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Původní díl" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Vyberte původní díl, který má být duplikován" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kopírovat obrázek" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Kopírovat obrázek z původního dílu" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Kopírovat kusovník" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Kopírovat kusovník z původního dílu" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Kopírovat data parametrů z původního dílu" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Kopírovat poznámky" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Kopírovat poznámky z původního dílu" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Kopírovat testy" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Kopírovat testovací šablony z původního dílu" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Počáteční skladové množství" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Počáteční skladové místo" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Zadejte počáteční skladové místo pro tento díl" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Vyberte dodavatele (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Vyberte výrobce (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Číslo dílu výrobce" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Vybraná společnost není platný dodavatel" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Vybraná společnost není platný výrobce" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Výrobce dílu se stejným MPN již existuje" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Dodavatelský díl s tímto SKU již existuje" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Název kategorie" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Budova" -#: part/serializers.py:885 +#: part/serializers.py:826 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:892 +#: part/serializers.py:833 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:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Skladové položky" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Revize" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Celkem skladem" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Nezařazené zásoby" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Skladové varianty" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Duplikovat díl" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Kopírovat počáteční data z jiného dílu" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kopírovat obrázek" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Kopírovat obrázek z původního dílu" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Kopírovat kusovník" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Kopírovat kusovník z původního dílu" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Kopírovat poznámky" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Kopírovat poznámky z původního dílu" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Kopírovat testy" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Kopírovat testovací šablony z původního dílu" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Počáteční zásoby" -#: part/serializers.py:1019 +#: part/serializers.py:986 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:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Informace o dodavateli" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Přidat počáteční informace dodavatele pro tento díl" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Kopírovat parametry kategorie" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Stávající obrázek" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Název souboru existujícího obrázku dílu" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Obrázek neexistuje" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Schválit celý kusovník" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Lze postavit" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Vyžadováno pro výrobní objednávku" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Přířazeno výrobním objednávkám" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Vyžadováno pro prodejní objednávky" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Přiřazeno prodejním objednávkám" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "IPN dílu" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "Popis dílu" -#: part/serializers.py:1369 +#: part/serializers.py:1336 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:1379 +#: part/serializers.py:1346 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:1389 +#: part/serializers.py:1356 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:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "Generovat vstupy inventury" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "Uložit vstupy inventury pro vybrané díly" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "Generovat report" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "Generovat report inventury pro vybrané díly" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Minimální cena" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Přespat vypočítanou hodnotu pro minimální cenu" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Měna minimální ceny" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Maximální cena" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Přespat vypočítanou hodnotu pro maximální cenu" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Měna maximální ceny" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Aktualizovat" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 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:1594 +#: part/serializers.py:1561 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:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "Množství vyžadováno pro tuto položku (může zahrnout jednotky)" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Vybrat nadřazenou sestavu" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Vyberte komponentu dílu" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "Neplatný formát množství" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Vyberte díl pro kopírování kusovníku z" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Odstranit existující data" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Odstranit existující položky kusovníku před kopírováním" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Zahrnout zděděné" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Přeskočit neplatné řádky" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Povolte tuto možnost pro přeskočení neplatných řádků" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Kopírovat náhradní díly" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Poskytuje nativní podporu pro čárové kódy" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Předpona krátkého čárového kódu" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Přizpůsobit předponu využívanou pro krátké čárové kódy, může být užitečné pro prostředtí s více instancemi InvenTree" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Automaticky vytvářet sestavy" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Automaticky vytvářet požadavky pro sestavení pro výrobní linky" @@ -9453,8 +9437,8 @@ msgstr "Nebyla poskytnuta žádná skladová položka" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Množství nesmí překročit dostupné skladové množství ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Cílové skladové umístění" @@ -9626,7 +9610,7 @@ msgstr "Skladová položka je již na skladě" msgid "Quantity must not be negative" msgstr "Množství nesmí být záporné" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "Sloučit do existující zásoby" @@ -9642,15 +9626,20 @@ msgstr "Poznámky ke skladovací transakci" msgid "Set stock location for counted items (optional)" msgstr "Nastavit umístění zásob pro počítané položky (volitelné)" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "Ke strukturální lokaci nelze přiřadit zásoby" + +#: stock/serializers.py:2007 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:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Další sériové číslo" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Předchozí sériové číslo" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 3fb7ed39b3..bd1e1a5be6 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -89,7 +89,7 @@ msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" @@ -97,16 +97,16 @@ msgstr "Ugyldigt antal angivet" msgid "Error details can be found in the admin panel" msgstr "Fejloplysninger kan findes i admin panelet" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Angiv dato" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Ugyldig decimalværdi" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referencenummer er for stort" msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Beskrivelse" msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Sti" @@ -334,7 +334,7 @@ msgstr "Serverfejl" msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Billede" msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabisk" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Ordre status" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Overordnet produktion" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategori" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Valgfri" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Sporet" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Ordre Udestående" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produktionsordre" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Lokation" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Produktionsordrer" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Monteringens stykliste er ikke blevet valideret" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Ansvarlig bruger eller gruppe skal specificeres" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Byggeordre enhed kan ikke ændres" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Produktionsordre reference" msgid "Reference" msgstr "Reference" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Vælg dele til produktion" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Salgsordrereference" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Kilde Lokation" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vælg lokation for lager, som skal benyttes til denne produktion (lad feltet stå tomt for at benytte vilkårligt lager)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Ekstern Byg" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Denne byggeordre er gennemført eksternt" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Destinations Placering" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Vælg placering, hvor de færdige elementer vil blive gemt" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Produktions antal" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Antal lagervarer som skal produceres" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Afsluttede elementer" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Antal lagervarer som er færdiggjort" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Produktions Status" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Oprettelsesdato" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Planlagt startdato for denne byggeordre" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Projekteret afslutningsdato" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Dato for afslutning" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "udført af" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Udstedt af" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link til ekstern URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Bygge Prioritet" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Projektkode" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Projektkode for denne byggeordre" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "Antal" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Lagervarer" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Kilde lagervare" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Del Navn" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Indtast serienumre for bygge output" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk alloker serienumre" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienumre findes allerede eller er ugyldige" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Varen skal være på lager" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgængeligt antal ({q}) overskredet" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Stykliste Reference" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "Stykliste del ID" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Stykliste Del Navn" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Byg" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Leverandør Del" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Tildelt Antal" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Stykliste Del" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "I Produktion" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Ekstern Lager" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Tilgængelig Lager" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Projekt Kode Label" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Opdateret" @@ -1608,9 +1644,9 @@ msgstr "Unik projekt kode" msgid "Project description" msgstr "Projektbeskrivelse" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Værdien består ikke valideringskontrol" msgid "Key string must be unique" msgstr "Nøglestrengen skal være unik" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Bruger" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Pris" @@ -1679,560 +1715,560 @@ msgstr "Pris" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token for adgang" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Hemmelighed" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Besked ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Vært" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Vært, hvorfra denne meddelelse blev modtaget" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Overskrift" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Overskrift for denne besked" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Titel" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Tilknytning" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publiceret" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Forfatter" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Opsummering" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Læs" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Blev dette nyhedselement læst?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Billedfil" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Vedhæftning" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Manglende fil" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Manglende eksternt link" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Vælg fil, der skal vedhæftes" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Filstørrelse" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Filstørrelse i bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Værdi" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Numerisk værdi, der vil blive gemt i modeldatabasen" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Farve" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Farve der vil blive vist på frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Låst" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Parameter skabelon navn skal være unikt" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Stregkode Scan" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Stregkode data" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Sendt" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Fejlede" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Leveret" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Bekræftet" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Indkommende" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Udgående" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Intet Svar" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Spor Levering" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Spor Læst" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Spor Klik" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifikator for denne meddelelse (leveres muligvis af et eksternt system)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "Tråd ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "E-mail Tråd" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "E-mail Tråde" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Nøgle" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index 982f42807a..ce2c81cb5c 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -89,7 +89,7 @@ msgstr "Konnte {original} nicht in {unit} umwandeln" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -97,16 +97,16 @@ msgstr "Keine gültige Menge" msgid "Error details can be found in the admin panel" msgstr "Fehlerdetails finden Sie im Admin-Panel" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Ungültiger Dezimalwert" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referenznummer ist zu groß" msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Name" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Beschreibung" msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Pfad" @@ -334,7 +334,7 @@ msgstr "Serverfehler" msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Bild" msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "Content type stimmt nicht mit der benötigten Mixin-Klasse überein" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Parameter kopieren" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabisch" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Bestellstatus" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Varianten einschließen" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Varianten einschließen" msgid "Part" msgstr "Teil" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategorie" @@ -661,125 +701,126 @@ msgstr "Baum ausschließen" msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Optional" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Baugruppe" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Prüfbar" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Offene Bestellung" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Verbraucht" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Bestellt" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Bauauftrag" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Lagerort" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Bauprodukt" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Die Stückliste wurde noch nicht kontrolliert" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Teil in Bauauftrag kann nicht geändert werden" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Zieldatum muss nach dem Startdatum liegen" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Bauauftragsreferenz" msgid "Reference" msgstr "Referenz" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Kurze Beschreibung des Baus (optional)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen beliebigen Lagerort)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Startdatum des Bauauftrags" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Geplantes Startdatum des Bauauftrags" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Externer Link" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Projektcode" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Bauauftragsposition" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Objekt bauen" msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Installiere in" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Name des Teils" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Lagerort für Bauprodukt" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "Alle Artikel" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "Unverfolgte Artikel" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "Verfolgte Artikel" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "Item-Typ" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "Elementtyp zur automatischen Zuweisung auswählen" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Stücklisten-Referenz" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "Stückliste Teil-ID" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Stückliste Teil-Name" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Zusammenbau" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Zuliefererteil" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Zugewiesene Menge" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Teilkategorienname" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Nachverfolgbar" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Geplant zum Erstellen" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Externes Lager" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Verfügbares Ersatzmaterial" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Verfügbarer Varianten Lagerbestand" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbrauchsmenge überschreitet die zugewiesene Menge" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Optionale Notizen für den Bestandsverbrauch" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Dupliziere Bauauftrag Artikelzuordnung" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Mindestens ein Element oder eine Zeile muss angegeben werden" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Aktualisiert" @@ -1608,9 +1644,9 @@ msgstr "Eindeutiger Projektcode" msgid "Project description" msgstr "Projektbeschreibung" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Benutzer" msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Preis" @@ -1679,560 +1715,560 @@ msgstr "Preis" msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Host" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Body" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "ID" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Titel" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Gelesen" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Bilddatei" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Benutzerdefinierte Einheit" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Einheitensymbol muss eindeutig sein" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Einheitsname muss eine gültige Kennung sein" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Einheitsname" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Optionales Einheitssymbol" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definition" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Einheitsdefinition" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Anhang" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Fehlende Datei" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Fehlender externer Link" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Upload Datum" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Datum der hochgeladenen Datei" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Dateigröße" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Dateigröße in Bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Ungültiger Modelltyp für Anhang angegeben" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Wert" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Name des Bundeslandes" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Bezeichnung" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Bezeichnung, die im Frontend angezeigt wird" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Farbe" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Farbe, die im Frontend angezeigt wird" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Name muss sich von den Namen des Referenzstatus unterscheiden" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Auswahlliste" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Auswahllisten" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Name der Auswahlliste" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Beschreibung der Auswahlliste" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Gesperrt" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Ist diese Auswahlliste gesperrt?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Kann diese Auswahlliste benutzt werden?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Standardeintrag" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Erstellt" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Name des Parameters" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Einheiten" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Aktiviert" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Vorlage" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Wert" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Parameter Wert" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Parameter Wert" msgid "Note" msgstr "Notiz" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Zeitstempel" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Ergebnis" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Angekündigt" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Gesendet" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Fehlgeschlagen" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Zugestellt" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Bestätigt" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Eingehend" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Ausgehend" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Keine Rückmeldung" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Schlüssel" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponente" @@ -2932,7 +2968,7 @@ msgstr "Komponente" msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Kaufbar" @@ -2940,7 +2976,7 @@ msgstr "Kaufbar" msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Verkäuflich" @@ -2952,7 +2988,7 @@ msgstr "Artikel sind grundsätzlich verkaufbar" msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuell" @@ -4215,8 +4251,8 @@ msgstr "Internes Teil ist aktiv" msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Hersteller" @@ -4406,7 +4442,7 @@ msgstr "Versandnotizen für interne Verwendung" msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Herstellerteil" @@ -4424,8 +4460,8 @@ msgstr "Teil auswählen" msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Zulieferer" msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" @@ -4493,15 +4529,15 @@ msgstr "Teil-URL des Zulieferers" msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Verpackungen" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "Vielfache" @@ -4542,31 +4578,31 @@ msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Standard-Währung für diesen Zulieferer" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Firmenname" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Auf Lager" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Fehler" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Gültig" @@ -4899,55 +4935,55 @@ msgstr "Druckerstandort" msgid "Scope the printer to a specific location" msgstr "Den Drucker an einen bestimmten Ort aufstellen" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Name des Geräts" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Gerätetyp" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Typ der Maschine" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Treiber" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Verwendeter Treiber für die Maschine" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Maschinen können deaktiviert werden" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Treiber verfügbar" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Keine Fehler" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Initialisiert" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Status der Maschine" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Maschine" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Maschinenkonfiguration" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Konfigurationstyp" @@ -5066,7 +5102,7 @@ msgstr "Bestellung" msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Internes Teil" @@ -5124,11 +5160,11 @@ msgstr "Gesamtpreis" msgid "Total price for this order" msgstr "Gesamtpreis für diese Bestellung" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Auftragswährung" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwenden)" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Zieldatum" @@ -5477,8 +5513,8 @@ msgstr "Kontrolliert von" msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sendung" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Parameter kopieren" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Positionen" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Abgeschlossene Positionen" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Lieferant" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Position" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Ablaufdatum" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Verwendet" @@ -6210,7 +6202,7 @@ msgstr "Teil-Kategorie" msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Standard-Lagerort" @@ -6259,656 +6251,660 @@ msgstr "Standard-Wert" msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Teile" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Dieses Teil kann nicht gelöscht werden, da es noch aktiv ist" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Dieses Teil kann nicht gelöscht werden, da es in einem Bauauftrag verwendet wird" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Teil '{self}' kann in der Stückliste nicht für '{parent}' (rekursiv) verwendet werden" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Teil '{parent}' wird in der Stückliste für '{self}' (rekursiv) verwendet" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN muss mit Regex-Muster {pattern} übereinstimmen" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Artikelbeschreibung (optional)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Version" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revision von" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimaler Bestand" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ist dieses Teil virtuell, wie zum Beispiel eine Software oder Lizenz?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Datum" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Benötigt" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "überprüft" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" @@ -6956,331 +6952,319 @@ msgstr "Kaufwährung dieses Lagerartikels" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Originalteil" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Originalteil zum Duplizieren auswählen" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Bild kopieren" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Bild vom Originalteil kopieren" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Stückliste kopieren" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Stückliste vom Originalteil kopieren" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Parameterdaten vom Originalteil kopieren" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Anmerkungen kopieren" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Notizen aus Originalteil kopieren" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Kategoriename" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Im Bau" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Lagerartikel" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Gesamtbestand" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Bild kopieren" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Bild vom Originalteil kopieren" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Stückliste kopieren" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Stückliste vom Originalteil kopieren" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Anmerkungen kopieren" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Notizen aus Originalteil kopieren" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Herstellbar" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Bietet native Unterstützung für Barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Ziel-Bestand" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Bestandsbewegungsnotizen" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Nächste Seriennummer" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Vorherige Seriennummer" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index 451235b26c..437b438ecd 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -89,7 +89,7 @@ msgstr "Δεν ήταν δυνατή η μετατροπή από {original} σ #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" @@ -97,16 +97,16 @@ msgstr "Μη έγκυρη ποσότητα" msgid "Error details can be found in the admin panel" msgstr "Μπορείτε να βρείτε λεπτομέρειες σφάλματος στον πίνακα διαχείρισης" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Εισάγετε ημερομηνία" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Μη έγκυρη δεκαδική τιμή" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος" msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Περιγραφή" msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Μονοπάτι" @@ -334,7 +334,7 @@ msgstr "Σφάλμα διακομιστή" msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Εικόνα" msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Αντιγραφή παραμέτρων" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Αντιγραφή γραμμών" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Αντιγραφή γραμμών από την αρχική παραγγελία" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Αντιγραφή επιπλέον γραμμών" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Αραβικά" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Κατάσταση παραγγελίας" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Συμπερίληψη παραλλαγών" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Συμπερίληψη παραλλαγών" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Κατηγορία" @@ -661,125 +701,126 @@ msgstr "Εξαίρεση δέντρου" msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Συναρμολόγηση" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Υπό δοκιμή" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Εκκρεμής παραγγελία" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Καταναλωμένο" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Σε παραγγελία" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Τοποθεσία" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Έξοδος" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Φιλτράρισμα με βάση το ID του αποθέματος εξόδου. Χρησιμοποιήστε 'null' για να βρείτε μη εγκατεστημένα στοιχεία κατασκευής" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Το BOM της συναρμολόγησης δεν έχει επικυρωθεί" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για ανενεργό Aντικειμένου" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για μη κλειδωμένο Aντικειμένου" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Οι εντολές κατασκευής μπορούν να εκτελεστούν εξωτερικά μόνο για Προϊόντα που μπορούν να αγοραστούν" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Πρέπει να οριστεί υπεύθυνος χρήστης ή ομάδα" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Η ημερομηνία στόχος πρέπει να είναι μετά την ημερομηνία έναρξης" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Αναφορά Παραγγελίας Κατασκευής" msgid "Reference" msgstr "Αναφορά" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Επιλέξτε τμήμα για κατασκευή" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Κωδικός Παραγγελίας Πωλήσεων" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Εξωτερική κατασκευή" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Αυτή η εντολή κατασκευής εκτελείται εξωτερικά" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Τοποθεσία Προορισμού" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Ποσότητα Κατασκευής" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Αριθμός αντικειμένων για κατασκευή" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Ολοκληρωμένα αντικείμενα" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Κατάσταση Κατασκευής" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Ημερομηνία έναρξης κατασκευής" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την εντολή κατασκευής" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Ημερομηνία ολοκλήρωσης στόχου" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Εκδόθηκε από" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Υπεύθυνος" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Προτεραιότητα Κατασκευής" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Κωδικός Έργου" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με ανοιχτές θυγατρικές κατασκευές" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με μη ολοκληρωμένα προϊόντα" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "Δεν είναι δυνατή η μερική ολοκλήρωση προϊόντος κατασκευής με δεσμευμένα στοιχεία" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Γραμμή εντολής κατασκευής" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Αντικείμενο κατασκευής" msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Ποσότητα καταναλωμένου αποθέματος" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Επίπεδο κατασκευής" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Όνομα Προϊόντος" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Τοποθεσία αποθέματος για την έξοδο κατασκευής" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Κατανάλωση δεσμευμένου αποθέματος" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "Κατανάλωση οποιουδήποτε αποθέματος έχει ήδη δεσμευτεί για αυτή την κατασκευή" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "Η εντολή κατασκευής έχει ανοιχτές θυγατρικές εντολές κατασκευής" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Η εντολή κατασκευής πρέπει να βρίσκεται σε κατάσταση παραγωγής" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής για την κατανομή ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Πρέπει να δοθούν στοιχεία κατανομής" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Τοποθεσία αποθέματος από την οποία θα ληφθούν τα Προϊόντα (αφήστε κενό για λήψη από οποιαδήποτε τοποθεσία)" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Εξαίρεση τοποθεσίας" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Εξαιρέστε στοιχεία αποθέματος από αυτή την επιλεγμένη τοποθεσία" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Εναλλάξιμο απόθεμα" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Στοιχεία αποθέματος σε πολλές τοποθεσίες μπορούν να χρησιμοποιηθούν εναλλάξ" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Εναλλακτικό απόθεμα" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Να επιτρέπεται η κατανομή εναλλακτικών Προϊόντων" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Προαιρετικά στοιχεία" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Κατανομή προαιρετικών στοιχείων BOM στην εντολή κατασκευής" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Αναφορά BOM" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID Προϊόντος BOM" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Όνομα Προϊόντος BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Κατασκευή" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Aντικειμένου προμηθευτή" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Δεσμευμένη ποσότητα" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Αναφορά κατασκευής" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Όνομα κατηγορίας Προϊόντος" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Ανιχνεύσιμο" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Στοιχείο BOM" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Σε παραγωγή" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Προγραμματισμένο για κατασκευή" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Εξωτερικό απόθεμα" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Διαθέσιμο απόθεμα" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Διαθέσιμο εναλλακτικό απόθεμα" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Διαθέσιμο απόθεμα παραλλαγών" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "Η καταναλωμένη ποσότητα υπερβαίνει τη δεσμευμένη ποσότητα" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Προαιρετικές σημειώσεις για την κατανάλωση αποθέματος" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "Το στοιχείο κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Διπλή κατανομή στοιχείου κατασκευής" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "Η γραμμή κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Διπλή κατανομή γραμμής κατασκευής" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Πρέπει να δοθεί τουλάχιστον ένα στοιχείο ή μία γραμμή" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Ετικέτα κωδικού έργου" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Ενημερώθηκε" @@ -1608,9 +1644,9 @@ msgstr "Μοναδικός κωδικός έργου" msgid "Project description" msgstr "Περιγραφή έργου" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Η τιμή δεν περνά τους ελέγχους εγκυρότη msgid "Key string must be unique" msgstr "Η συμβολοσειρά κλειδιού πρέπει να είναι μοναδική" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Χρήστης" msgid "Price break quantity" msgstr "Ποσότητα κλιμακωτής τιμής" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Τιμή" @@ -1679,560 +1715,560 @@ msgstr "Τιμή" msgid "Unit price at specified quantity" msgstr "Τιμή μονάδας στη συγκεκριμένη ποσότητα" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Το endpoint στο οποίο λαμβάνεται αυτό το webhook" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Όνομα για αυτό το webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Είναι αυτό το webhook ενεργό" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token πρόσβασης" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Μυστικό" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Κοινόχρηστο μυστικό για HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID μηνύματος" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Μοναδικό αναγνωριστικό για αυτό το μήνυμα" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Host" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Host από τον οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Κεφαλίδα" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Κεφαλίδα αυτού του μηνύματος" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Κείμενο" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Κείμενο αυτού του μηνύματος" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Endpoint στο οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Επεξεργάστηκε" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Ολοκληρώθηκε η εργασία σε αυτό το μήνυμα;" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "ID" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Τίτλος" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Σύνδεσμος" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Δημοσιεύθηκε" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Συντάκτης" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Περίληψη" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Αναγνωσμένο" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Διαβάστηκε αυτό το νέο;" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Αρχείο εικόνας" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Τύπος μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "ID μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Προσαρμοσμένη μονάδα" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Το σύμβολο μονάδας πρέπει να είναι μοναδικό" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Το όνομα μονάδας πρέπει να είναι έγκυρο αναγνωριστικό" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Όνομα μονάδας" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Σύμβολο" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Προαιρετικό σύμβολο μονάδας" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Ορισμός" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Ορισμός μονάδας" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Συνημμένο" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Το αρχείο λείπει" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Τύπος μοντέλου" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Τύπος μοντέλου-στόχου για την εικόνα" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Επιλέξτε αρχείο για επισύναψη" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Σχόλιο" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Σχόλιο συνημμένου" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Ημερομηνία μεταφόρτωσης" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Ημερομηνία μεταφόρτωσης του αρχείου" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Μέγεθος αρχείου" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Μέγεθος αρχείου σε bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Προσαρμοσμένη κατάσταση" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Προσαρμοσμένες καταστάσεις" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Σετ κατάστασης αναφοράς" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Σετ καταστάσεων που επεκτείνεται με αυτή την προσαρμοσμένη κατάσταση" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Λογικό κλειδί" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Λογικό κλειδί κατάστασης που είναι ισοδύναμο με αυτή την προσαρμοσμένη κατάσταση στη λογική της εφαρμογής" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Τιμή" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Αριθμητική τιμή που θα αποθηκευτεί στη βάση δεδομένων των μοντέλων" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Όνομα της κατάστασης" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Ετικέτα" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Ετικέτα που θα εμφανίζεται στο frontend" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Χρώμα" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Χρώμα που θα εμφανίζεται στο frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Μοντέλο" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Μοντέλο με το οποίο συσχετίζεται αυτή η κατάσταση" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Πρέπει να επιλεγεί μοντέλο" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Πρέπει να επιλεγεί κλειδί" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Πρέπει να επιλεγεί λογικό κλειδί" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από το λογικό κλειδί" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Πρέπει να δοθεί έγκυρη κλάση κατάστασης αναφοράς" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από τα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "Το λογικό κλειδί πρέπει να ανήκει στα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Το όνομα πρέπει να είναι διαφορετικό από τα ονόματα της κατάστασης αναφοράς" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Λίστα επιλογών" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Λίστες επιλογών" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Όνομα της λίστας επιλογών" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Περιγραφή της λίστας επιλογών" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Κλειδωμένο" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Είναι αυτή η λίστα επιλογών κλειδωμένη;" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Μπορεί να χρησιμοποιηθεί αυτή η λίστα επιλογών;" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Πρόσθετο πηγής" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Πρόσθετο που παρέχει τη λίστα επιλογών" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Συμβολοσειρά πηγής" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Προαιρετική συμβολοσειρά που ταυτοποιεί την πηγή που χρησιμοποιείται για αυτή τη λίστα" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Προεπιλεγμένη καταχώρηση" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Προεπιλεγμένη καταχώρηση για αυτή τη λίστα επιλογών" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Δημιουργήθηκε" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Ημερομηνία και ώρα δημιουργίας της λίστας επιλογών" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Τελευταία ενημέρωση" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης της λίστας επιλογών" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Καταχώρηση λίστας επιλογών" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Καταχωρήσεις λίστας επιλογών" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Λίστα επιλογών στην οποία ανήκει αυτή η καταχώρηση" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Τιμή της καταχώρησης λίστας επιλογών" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Ετικέτα για την καταχώρηση λίστας επιλογών" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Περιγραφή της καταχώρησης λίστας επιλογών" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Είναι ενεργή αυτή η καταχώρηση λίστας επιλογών;" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Πρότυπο παραμέτρου" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν μονάδες" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Οι επιλογές πρέπει να είναι μοναδικές" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Το όνομα προτύπου παραμέτρου πρέπει να είναι μοναδικό" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Όνομα παραμέτρου" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Μονάδες" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Φυσικές μονάδες για αυτή την παράμετρο" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Περιγραφή παραμέτρου" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Είναι αυτή η παράμετρος τύπου checkbox;" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Επιλογές" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή την παράμετρο (διαχωρισμένες με κόμμα)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Λίστα επιλογών για αυτή την παράμετρο" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Ενεργό" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Πρότυπο" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Δεδομένα" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Τιμή παραμέτρου" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Τιμή παραμέτρου" msgid "Note" msgstr "Σημείωση" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Προαιρετικό πεδίο σημείωσης" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Σάρωση barcode" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Δεδομένα barcode" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Χρήστης που σάρωσε το barcode" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Χρονική σήμανση" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Ημερομηνία και ώρα της σάρωσης barcode" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "URL endpoint που επεξεργάστηκε το barcode" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Πλαίσιο" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Δεδομένα πλαισίου για τη σάρωση barcode" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Απόκριση" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Δεδομένα απόκρισης από τη σάρωση barcode" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Αποτέλεσμα" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Ήταν επιτυχημένη η σάρωση barcode;" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Παρουσιάστηκε σφάλμα" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Η διαγραφή του log email προστατεύεται. Ορίστε το INVENTREE_PROTECT_EMAIL_LOG σε False για να επιτραπεί η διαγραφή." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "Μήνυμα email" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "Μηνύματα email" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Ανακοινώθηκε" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Εστάλη" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Απέτυχε" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Παραδόθηκε" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Επιβεβαιώθηκε" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Εισερχόμενο" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Εξερχόμενο" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Χωρίς απάντηση" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Παρακολούθηση παράδοσης" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Παρακολούθηση ανάγνωσης" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Παρακολούθηση κλικ" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το μήνυμα (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "ID νήματος" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το νήμα μηνυμάτων (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Νήμα" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Συνδεδεμένο νήμα για αυτό το μήνυμα" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "Νήμα email" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "Νήματα email" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Κλειδί" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Μοναδικό κλειδί για αυτό το νήμα (χρησιμοποιείται για την ταυτοποίησή του)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Μοναδικό αναγνωριστικό για αυτό το νήμα" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Ξεκίνησε εσωτερικά" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Ξεκίνησε αυτό το νήμα εσωτερικά;" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Ημερομηνία και ώρα δημιουργίας του νήματος" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης του νήματος" @@ -2923,8 +2959,8 @@ msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλο msgid "Parts can be assembled from other components by default" msgstr "Τα Προϊόντα μπορούν να συναρμολογούνται από άλλα συστατικά από προεπιλογή" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Συστατικό" @@ -2932,7 +2968,7 @@ msgstr "Συστατικό" msgid "Parts can be used as sub-components by default" msgstr "Τα Προϊόντα μπορούν να χρησιμοποιούνται ως υποσυστατικά από προεπιλογή" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Αγοράσιμο" @@ -2940,7 +2976,7 @@ msgstr "Αγοράσιμο" msgid "Parts are purchaseable by default" msgstr "Τα Προϊόντα είναι αγοράσιμα από προεπιλογή" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Πωλήσιμο" @@ -2952,7 +2988,7 @@ msgstr "Τα Προϊόντα είναι πωλήσιμα από προεπιλ msgid "Parts are trackable by default" msgstr "Τα Προϊόντα είναι ανιχνεύσιμα από προεπιλογή" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Εικονικό" @@ -4215,8 +4251,8 @@ msgstr "Το εσωτερικό προϊόν είναι ενεργό" msgid "Supplier is Active" msgstr "Ο προμηθευτής είναι ενεργός" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Κατασκευαστής" @@ -4406,7 +4442,7 @@ msgstr "Σημειώσεις αποστολής για εσωτερική χρή msgid "Link to address information (external)" msgstr "Σύνδεσμος σε πληροφορίες διεύθυνσης (εξωτερικό)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Προϊόν κατασκευαστή" @@ -4424,8 +4460,8 @@ msgstr "Επιλογή προϊόντος" msgid "Select manufacturer" msgstr "Επιλογή κατασκευαστή" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,8 @@ msgstr "Οι μονάδες συσκευασίας πρέπει να είναι msgid "Linked manufacturer part must reference the same base part" msgstr "Το συνδεδεμένο προϊόν κατασκευαστή πρέπει να αναφέρεται στο ίδιο βασικό προϊόν" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Προμηθευτής" msgid "Select supplier" msgstr "Επιλογή προμηθευτή" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Κωδικός αποθέματος προμηθευτή" @@ -4493,15 +4529,15 @@ msgstr "URL εξωτερικού συνδέσμου προϊόντος προμ msgid "Supplier part description" msgstr "Περιγραφή προϊόντος προμηθευτή" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "βασικό κόστος" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Συσκευασία" @@ -4518,7 +4554,7 @@ msgstr "Ποσότητα ανά συσκευασία" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Συνολική ποσότητα που παρέχεται σε μία συσκευασία. Αφήστε κενό για μεμονωμένα είδη." -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "πολλαπλάσιο" @@ -4542,31 +4578,31 @@ msgstr "Ημερομηνία τελευταίας ενημέρωσης δεδο msgid "Supplier Price Break" msgstr "Κλιμακωτή τιμή προμηθευτή" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιείται για αυτόν τον προμηθευτή" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Όνομα εταιρείας" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Σε απόθεμα" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Κλιμακωτές τιμές" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Προέκυψε σφάλμα κατά την εξαγωγή δεδομένων" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Το plugin εξαγωγής δεδομένων επέστρεψε λανθασμένη μορφή δεδομένων" @@ -4735,11 +4771,11 @@ msgstr "Δείκτης γραμμής" msgid "Original row data" msgstr "Αρχικά δεδομένα γραμμής" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Σφάλματα" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Έγκυρο" @@ -4899,55 +4935,55 @@ msgstr "Τοποθεσία εκτυπωτή" msgid "Scope the printer to a specific location" msgstr "Περιορισμός του εκτυπωτή σε συγκεκριμένη τοποθεσία" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Όνομα μηχανήματος" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Τύπος μηχανήματος" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Τύπος μηχανήματος" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Driver" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Driver που χρησιμοποιείται για το μηχάνημα" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Τα μηχανήματα μπορούν να απενεργοποιούνται" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Ο driver είναι διαθέσιμος" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Χωρίς σφάλματα" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Αρχικοποιήθηκε" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Κατάσταση μηχανήματος" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Μηχάνημα" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Ρύθμιση μηχανήματος" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Τύπος ρύθμισης" @@ -5066,7 +5102,7 @@ msgstr "Παραγγελία" msgid "Order Complete" msgstr "Η παραγγελία ολοκληρώθηκε" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Εσωτερικό προϊόν" @@ -5124,11 +5160,11 @@ msgstr "Συνολική τιμή" msgid "Total price for this order" msgstr "Συνολική τιμή για αυτή την παραγγελία" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Νόμισμα παραγγελίας" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Νόμισμα για αυτή την παραγγελία (αφήστε κενό για χρήση της προεπιλογής εταιρείας)" @@ -5168,7 +5204,7 @@ msgstr "Ημερομηνία έναρξης" msgid "Scheduled start date for this order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" @@ -5477,8 +5513,8 @@ msgstr "Έλεγχος από" msgid "User who checked this shipment" msgstr "Χρήστης που έλεγξε αυτή την αποστολή" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Αποστολή" @@ -5544,8 +5580,8 @@ msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερ msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID παραγγελίας" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID της παραγγελίας προς αντιγραφή" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Αντιγραφή γραμμών" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Αντιγραφή γραμμών από την αρχική παραγγελία" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Αντιγραφή επιπλέον γραμμών" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Αντιγραφή παραμέτρων" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Γραμμές" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Ολοκληρωμένες γραμμές" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Αντιγραφή παραγγελίας" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Καθορίστε επιλογές για την αντιγραφή αυτής της παραγγελίας" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Μη έγκυρο ID παραγγελίας" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Όνομα προμηθευτή" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Η παραγγελία δεν είναι ανοικτή" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Αυτόματη τιμολόγηση" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Νόμισμα τιμής αγοράς" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Συγχώνευση ειδών" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Συγχώνευση ειδών με το ίδιο προϊόν, προορισμό και ημερομηνία στόχο σε μία γραμμή" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Εσωτερικός κωδικός προϊόντος" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Εσωτερική ονομασία προϊόντος" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Πρέπει να καθοριστεί εντολή αγοράς" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Γραμμή" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Ημερομηνία λήξης" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Σαρωμένο barcode" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Το barcode χρησιμοποιείται ήδη" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Πρέπει να δοθούν γραμμές" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Αποστολές" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Ολοκληρωμένες αποστολές" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Νόμισμα τιμής πώλησης" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Δεσμευμένα είδη" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Η ποσότητα πρέπει να είναι θετική" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Γραμμή εντολής επιστροφής" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Η γραμμή έχει ήδη παραληφθεί" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Ποσότητα προς επιστροφή" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Νόμισμα τιμής γραμμής" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "Έχει αναθεωρήσεις" msgid "BOM Valid" msgstr "Έγκυρο BOM" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Κατηγορίες κατά κληρονομικότητα" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "Αν είναι αληθές, συμπεριλαμβάνονται είδη σε θυγατρικές κατηγορίες της δοσμένης κατηγορίας" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Φιλτράρισμα κατά αριθμητικό ID κατηγορίας ή τη λέξη 'null'" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Το προϊόν συναρμολόγησης είναι υπό δοκιμή" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Το προϊόν Προϊόντος είναι υπό δοκιμή" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Χρήσεις" @@ -6210,7 +6202,7 @@ msgstr "Κατηγορία προϊόντος" msgid "Part Categories" msgstr "Κατηγορίες προϊόντων" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Προεπιλεγμένη τοποθεσία" @@ -6259,656 +6251,660 @@ msgstr "Προεπιλεγμένη τιμή" msgid "Default Parameter Value" msgstr "Προεπιλεγμένη τιμή παραμέτρου" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Προϊόντα" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή είναι κλειδωμένο" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή είναι ακόμη ενεργό" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή χρησιμοποιείται σε συναρμολόγηση" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Το προϊόν '{self}' δεν μπορεί να χρησιμοποιηθεί στο BOM για '{parent}' (αναδρομικά)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Το προϊόν '{parent}' χρησιμοποιείται στο BOM για '{self}' (αναδρομικά)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Το IPN πρέπει να ταιριάζει με το πρότυπο regex {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Το προϊόν δεν μπορεί να είναι αναθεώρηση του εαυτού του" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Οι αναθεωρήσεις επιτρέπονται μόνο για προϊόντα συναρμολόγησης" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Δεν μπορεί να γίνει αναθεώρηση προϊόντος προτύπου" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "Το γονικό προϊόν πρέπει να αντιστοιχεί στο ίδιο πρότυπο" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Υπάρχει ήδη είδος αποθέματος με αυτόν τον σειριακό αριθμό" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Δεν επιτρέπεται διπλό IPN στις ρυθμίσεις προϊόντος" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Υπάρχει ήδη διπλή αναθεώρηση προϊόντος." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Υπάρχει ήδη προϊόν με αυτό το όνομα, IPN και αναθεώρηση." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Τα προϊόντα δεν μπορούν να αντιστοιχιστούν σε δομικές κατηγορίες προϊόντων!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Όνομα προϊόντος" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Είναι πρότυπο" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Είναι αυτό το προϊόν προϊόν προτύπου;" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Είναι αυτό το προϊόν παραλλαγή άλλου προϊόντος;" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Παραλλαγή του" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Περιγραφή προϊόντος (προαιρετικά)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Λέξεις-κλειδιά" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Λέξεις-κλειδιά προϊόντος για βελτίωση της ορατότητας στα αποτελέσματα αναζήτησης" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Αριθμός αναθεώρησης ή έκδοσης προϊόντος" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Αναθεώρηση" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Είναι αυτό το προϊόν αναθεώρηση άλλου προϊόντος;" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Αναθεώρηση του" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Πού αποθηκεύεται συνήθως αυτό το είδος;" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Προεπιλεγμένη λήξη" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Χρόνος λήξης (σε ημέρες) για είδη αποθέματος αυτού του προϊόντος" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Ελάχιστο απόθεμα" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Ελάχιστο επιτρεπτό επίπεδο αποθέματος" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Μονάδες μέτρησης για αυτό το προϊόν" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Μπορεί αυτό το προϊόν να κατασκευαστεί από άλλα προϊόντα;" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Μπορεί αυτό το προϊόν να χρησιμοποιηθεί για την κατασκευή άλλων προϊόντων;" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Έχει αυτό το προϊόν ιχνηλάτηση για μοναδικά είδη;" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Μπορούν να καταχωρηθούν αποτελέσματα δοκιμών για αυτό το προϊόν;" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Μπορεί αυτό το προϊόν να αγοραστεί από εξωτερικούς προμηθευτές;" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Μπορεί αυτό το προϊόν να πωληθεί σε πελάτες;" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Είναι αυτό το προϊόν ενεργό;" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Κλειδωμένα προϊόντα δεν μπορούν να τροποποιηθούν" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Είναι αυτό ένα εικονικό προϊόν, όπως προϊόν λογισμικού ή άδεια;" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "Το BOM έχει επικυρωθεί" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Είναι το BOM για αυτό το προϊόν έγκυρο;" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "Άθροισμα ελέγχου BOM" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Αποθηκευμένο άθροισμα ελέγχου BOM" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Έλεγχος BOM από" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Ημερομηνία ελέγχου BOM" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Χρήστης δημιουργίας" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Ιδιοκτήτης υπεύθυνος για αυτό το προϊόν" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Πώληση πολλαπλάσιων" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Νόμισμα που χρησιμοποιείται για την προσωρινή αποθήκευση υπολογισμών τιμολόγησης" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Ελάχιστο κόστος BOM" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Ελάχιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Μέγιστο κόστος BOM" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Μέγιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Ελάχιστο κόστος αγοράς" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Ελάχιστο ιστορικό κόστος αγοράς" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Μέγιστο κόστος αγοράς" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Μέγιστο ιστορικό κόστος αγοράς" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Ελάχιστη εσωτερική τιμή" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Ελάχιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Μέγιστη εσωτερική τιμή" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Μέγιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Ελάχιστη τιμή προμηθευτή" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Ελάχιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Μέγιστη τιμή προμηθευτή" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Μέγιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Ελάχιστο κόστος παραλλαγής" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Υπολογισμένο ελάχιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Μέγιστο κόστος παραλλαγής" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Υπολογισμένο μέγιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Ελάχιστο κόστος" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Παράκαμψη ελάχιστου κόστους" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Μέγιστο κόστος" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Παράκαμψη μέγιστου κόστους" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Υπολογισμένο συνολικό ελάχιστο κόστος" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Υπολογισμένο συνολικό μέγιστο κόστος" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Ελάχιστη τιμή πώλησης" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Ελάχιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Μέγιστη τιμή πώλησης" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Μέγιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Ελάχιστο κόστος πώλησης" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Ελάχιστη ιστορική τιμή πώλησης" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Μέγιστο κόστος πώλησης" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Μέγιστη ιστορική τιμή πώλησης" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Προϊόν για απογραφή" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Αριθμός ειδών" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Αριθμός μεμονωμένων εγγραφών αποθέματος κατά τον χρόνο απογραφής" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Συνολικό διαθέσιμο απόθεμα κατά τον χρόνο απογραφής" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Ημερομηνία" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Ημερομηνία που πραγματοποιήθηκε η απογραφή" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Ελάχιστο κόστος αποθέματος" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Εκτιμώμενο ελάχιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Μέγιστο κόστος αποθέματος" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Εκτιμώμενο μέγιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Κλιμακωτή τιμή πώλησης προϊόντος" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Πρότυπο δοκιμής προϊόντος" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Μη έγκυρο όνομα προτύπου - πρέπει να περιλαμβάνει τουλάχιστον έναν αλφαριθμητικό χαρακτήρα" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "Πρότυπα δοκιμών μπορούν να δημιουργηθούν μόνο για προϊόντα που είναι υπό δοκιμή" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "Υπάρχει ήδη πρότυπο δοκιμής με το ίδιο κλειδί για το προϊόν" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Όνομα δοκιμής" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Εισαγάγετε όνομα για τη δοκιμή" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Κλειδί δοκιμής" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Απλοποιημένο κλειδί για τη δοκιμή" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Περιγραφή δοκιμής" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Εισαγάγετε περιγραφή για αυτή τη δοκιμή" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Είναι αυτή η δοκιμή ενεργή;" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Απαραίτητη" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Απαιτείται η επιτυχής ολοκλήρωση αυτής της δοκιμής;" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Απαιτεί τιμή" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή τιμή κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Απαιτεί συνημμένο" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή συνημμένο αρχείο κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή τη δοκιμή (διαχωρισμένες με κόμμα)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση είναι κλειδωμένη" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση παραλλαγής είναι κλειδωμένη" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Επιλέξτε γονικό προϊόν" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Υποπροϊόν" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Επιλέξτε προϊόν που θα χρησιμοποιηθεί στο BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Ποσότητα BOM για αυτό το στοιχείο BOM" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Αυτό το στοιχείο BOM είναι προαιρετικό" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Αυτό το στοιχείο BOM είναι αναλώσιμο (δεν παρακολουθείται στις εντολές παραγωγής)" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Ποσότητα ρύθμισης" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Επιπλέον απαιτούμενη ποσότητα για μια παραγωγή, για να ληφθούν υπόψη οι απώλειες ρύθμισης" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Φθορά" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Εκτιμώμενη φθορά για μια παραγωγή, εκφρασμένη ως ποσοστό (0-100)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Πολλαπλάσιο στρογγυλοποίησης" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Στρογγυλοποίηση προς τα πάνω της απαιτούμενης ποσότητας παραγωγής στο πλησιέστερο πολλαπλάσιο αυτής της τιμής" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Αναφορά στοιχείου BOM" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Σημειώσεις στοιχείου BOM" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Άθροισμα ελέγχου" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Άθροισμα ελέγχου γραμμής BOM" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Επικυρωμένο" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Αυτό το στοιχείο BOM έχει επικυρωθεί" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Κληρονομείται" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Αυτό το στοιχείο BOM κληρονομείται από τα BOM για προϊόντα παραλλαγών" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Είδη αποθέματος για προϊόντα παραλλαγών μπορούν να χρησιμοποιηθούν για αυτό το στοιχείο BOM" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Η ποσότητα πρέπει να είναι ακέραια τιμή για προϊόντα με ιχνηλάτηση" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Πρέπει να καθοριστεί υποπροϊόν" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Εναλλακτικό στοιχείο BOM" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "Το εναλλακτικό προϊόν δεν μπορεί να είναι το ίδιο με το κύριο προϊόν" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Γονικό στοιχείο BOM" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Εναλλακτικό προϊόν" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Προϊόν 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Προϊόν 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Επιλέξτε σχετικό προϊόν" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Σημείωση για αυτή τη σχέση" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊόντος μεταξύ ενός προϊόντος και του εαυτού του" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Υπάρχει ήδη διπλή σχέση" @@ -6956,331 +6952,319 @@ msgstr "Νόμισμα αγοράς για αυτό το είδος αποθέμ msgid "File is not an image" msgstr "Το αρχείο δεν είναι εικόνα" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Αρχικό προϊόν" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Επιλέξτε αρχικό προϊόν για αντιγραφή" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Αντιγραφή εικόνας" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Αντιγραφή BOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Αντιγραφή δεδομένων παραμέτρων από το αρχικό προϊόν" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Αντιγραφή σημειώσεων" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Αντιγραφή δοκιμών" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Αρχική ποσότητα αποθέματος" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Καθορίστε αρχική ποσότητα αποθέματος για αυτό το προϊόν. Αν η ποσότητα είναι μηδέν, δεν προστίθεται απόθεμα" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Αρχική τοποθεσία αποθέματος" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Καθορίστε αρχική τοποθεσία αποθέματος για αυτό το προϊόν" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Επιλέξτε προμηθευτή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Επιλέξτε κατασκευαστή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος προμηθευτής" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος κατασκευαστής" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Υπάρχει ήδη προϊόν κατασκευαστή με αυτό το MPN" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Υπάρχει ήδη προϊόν προμηθευτή με αυτό το SKU" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Όνομα κατηγορίας" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Σε παραγωγή" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Ποσότητα αυτού του προϊόντος που βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Εκκρεμής ποσότητα αυτού του προϊόντος που έχει προγραμματιστεί για παραγωγή" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Είδη αποθέματος" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Αναθεωρήσεις" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Συνολικό απόθεμα" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Μη δεσμευμένο απόθεμα" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Απόθεμα παραλλαγών" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Αντιγραφή προϊόντος" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Αντιγραφή αρχικών δεδομένων από άλλο προϊόν" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Αντιγραφή εικόνας" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Αντιγραφή BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Αντιγραφή σημειώσεων" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Αντιγραφή δοκιμών" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Αρχικό απόθεμα" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Δημιουργία προϊόντος με αρχική ποσότητα αποθέματος" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Πληροφορίες προμηθευτή" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Προσθήκη αρχικών πληροφοριών προμηθευτή για αυτό το προϊόν" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Αντιγραφή παραμέτρων κατηγορίας" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Αντιγραφή προτύπων παραμέτρων από την επιλεγμένη κατηγορία προϊόντος" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Υπάρχουσα εικόνα" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Όνομα αρχείου υπάρχουσας εικόνας προϊόντος" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Το αρχείο εικόνας δεν υπάρχει" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Επικύρωση ολόκληρης της λίστας υλικών (BOM)" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Μπορεί να παραχθεί" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Απαιτείται για εντολές παραγωγής" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Δεσμευμένο σε εντολές παραγωγής" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Απαιτείται για εντολές πώλησης" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Δεσμευμένο σε εντολές πώλησης" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Ελάχιστη τιμή" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Παράκαμψη υπολογισμένης τιμής για την ελάχιστη τιμή" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Νόμισμα ελάχιστης τιμής" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Μέγιστη τιμή" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Παράκαμψη υπολογισμένης τιμής για τη μέγιστη τιμή" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Νόμισμα μέγιστης τιμής" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Ενημέρωση" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Ενημέρωση τιμολόγησης για αυτό το προϊόν" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Δεν ήταν δυνατή η μετατροπή από τα δοθέντα νομίσματα σε {default_currency}" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Η ελάχιστη τιμή δεν πρέπει να είναι μεγαλύτερη από τη μέγιστη τιμή" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Η μέγιστη τιμή δεν πρέπει να είναι μικρότερη από την ελάχιστη τιμή" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Επιλέξτε τη γονική συναρμολόγηση" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Επιλέξτε το προϊόν Προϊόντος" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Επιλέξτε προϊόν από το οποίο θα αντιγραφεί το BOM" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Αφαίρεση υπαρχόντων δεδομένων" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Αφαίρεση υπαρχόντων στοιχείων BOM πριν την αντιγραφή" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Συμπερίληψη κληρονομημένων" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Συμπερίληψη στοιχείων BOM που κληρονομούνται από προϊόντα προτύπων" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Παράλειψη μη έγκυρων γραμμών" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Ενεργοποιήστε αυτή την επιλογή για να παραλείπονται οι μη έγκυρες γραμμές" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Αντιγραφή εναλλακτικών προϊόντων" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Αντιγραφή εναλλακτικών προϊόντων κατά την αντιγραφή στοιχείων BOM" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Παρέχει εγγενή υποστήριξη για barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Πρόθεμα σύντομου barcode" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Προσαρμόστε το πρόθεμα που χρησιμοποιείται για σύντομα barcodes, χρήσιμο σε περιβάλλοντα με πολλαπλά InvenTree instances" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Αυτόματη δημιουργία παραγωγών" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Αυτόματη δημιουργία εντολών παραγωγής για συναρμολογήσεις" @@ -9453,8 +9437,8 @@ msgstr "Δεν δόθηκε είδος αποθέματος" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Τοποθεσία προορισμού αποθέματος" @@ -9626,7 +9610,7 @@ msgstr "Το είδος βρίσκεται ήδη σε απόθεμα" msgid "Quantity must not be negative" msgstr "Η ποσότητα δεν πρέπει να είναι αρνητική" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "Συγχώνευση με υπάρχον απόθεμα" @@ -9642,15 +9626,20 @@ msgstr "Σημειώσεις συναλλαγής αποθέματος" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "Συγχώνευση επιστρεφόμενων ειδών με υπάρχοντα είδη αποθέματος, όπου είναι δυνατό" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Επόμενος σειριακός αριθμός" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Προηγούμενος σειριακός αριθμός" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index a064fc89ea..346b310abc 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-06-30 09:30+0000\n" +"POT-Creation-Date: 2026-07-06 23:08+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -90,7 +90,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "" @@ -98,16 +98,16 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -273,18 +273,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -295,7 +295,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "" @@ -335,7 +335,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -346,11 +346,11 @@ msgstr "" msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -374,6 +374,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -543,31 +583,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -588,9 +628,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -662,125 +702,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,224 +830,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1025,456 +1061,456 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1585,7 +1621,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1609,9 +1645,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1657,10 +1693,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1671,7 +1707,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1680,560 +1716,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2244,181 +2280,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2924,8 +2960,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2933,7 +2969,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2941,7 +2977,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2953,7 +2989,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4216,8 +4252,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4407,7 +4443,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4425,8 +4461,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4454,8 +4490,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4466,7 +4502,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4494,15 +4530,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4519,7 +4555,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4543,31 +4579,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4736,11 +4772,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4900,55 +4936,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5067,7 +5103,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5125,11 +5161,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5169,7 +5205,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5478,8 +5514,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5545,8 +5581,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5686,39 +5722,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5726,287 +5730,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6146,59 +6138,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6211,7 +6203,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6260,656 +6252,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6957,331 +6953,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7598,7 +7582,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7642,11 +7626,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9454,8 +9438,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9627,7 +9611,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9643,15 +9627,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 5b0593ecf7..b45129bc4d 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -89,7 +89,7 @@ msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -97,16 +97,16 @@ msgstr "Cantidad proporcionada no válida" msgid "Error details can be found in the admin panel" msgstr "Detalles del error pueden encontrarse en el panel de administración" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Ingrese la fecha" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Número decimal no válido" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "El número de referencia es demasiado grande" msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Ruta" @@ -334,7 +334,7 @@ msgstr "Error de servidor" msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Imágen" msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Copiar Parámetros" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Copiar líneas" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Copiar elementos de línea del pedido original" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Copiar líneas adicionales" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Copiar elementos extra de la línea del pedido original" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Árabe" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "No es un código de moneda válido" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Estado del pedido" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Incluye Variantes" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Categoría" @@ -661,125 +701,126 @@ msgstr "Excluir Árbol" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Consumible" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opcional" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Montaje" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Comprobable" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Agotado" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "En pedido" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Ubicación" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Salida" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Construir órdenes" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "BOM de ensamblado no ha sido validado" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "La orden de construcción no puede ser creado para una parte inactiva" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "La orden de construcción no puede ser creada para una parte desbloqueada" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Se debe especificar un usuario o grupo responsable" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "La parte del pedido de construcción no puede ser modificada" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "La fecha límite debe ser posterior a la fecha de inicio" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Número de orden de construcción o armado" msgid "Reference" msgstr "Referencia" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Breve descripción de la construcción (opcional)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Seleccionar parte a construir o armar" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referencia de orden de venta" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Ubicación de la fuente" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Número de objetos existentes a construir" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Elementos completados" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Número de productos en stock que se han completado" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Estado de la construcción" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Crear fecha de inicio" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Fecha de inicio programada para este pedido" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Fecha límite de finalización" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Fecha de finalización" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "terminado por" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Link externo" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:961 +#: build/models.py:958 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:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Ensamblar equipo" msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 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:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:233 +#: build/serializers.py:256 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:237 +#: build/serializers.py:260 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:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:643 +#: build/serializers.py:656 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:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:822 +#: build/serializers.py:835 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:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Actualizado" @@ -1608,9 +1644,9 @@ msgstr "Código único del proyecto" msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "El valor no pasa las comprobaciones de validación" msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Precio" @@ -1679,560 +1715,560 @@ msgstr "Precio" msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Clave" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Servidor" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Encabezado" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Título" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publicado" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Resumen" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Leer" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definición" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Comentario" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Valor" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Modelo" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Creado" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Fecha y hora en la que se creó la lista de selección" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Unidades" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Opciones" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Plantilla" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Datos" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Valor del parámetro" msgid "Note" msgstr "Nota" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Respuesta" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Resultado" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Clave" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Componente" @@ -2932,7 +2968,7 @@ msgstr "Componente" msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Comprable" @@ -2940,7 +2976,7 @@ msgstr "Comprable" msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Vendible" @@ -2952,7 +2988,7 @@ msgstr "Las partes se pueden vender por defecto" msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtual" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Fabricante" @@ -4406,7 +4442,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -4424,8 +4460,8 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4493,15 +4529,15 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "costo base" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Paquetes" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "múltiple" @@ -4542,31 +4578,31 @@ msgstr "Fecha de última actualización de los datos de disponibilidad" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Moneda predeterminada utilizada para este proveedor" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "Número de fila" msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Errores" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Válido" @@ -4899,55 +4935,55 @@ msgstr "Ubicación de la Impresora" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Nombre de la máquina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Tipo de Máquina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Tipo de máquina" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Controlador" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Controlador usado para la máquina" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Las máquinas pueden ser desactivadas" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Controlador disponible" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Sin errores" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Inicializado" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Estado de máquina" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Máquina" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Tipo de configuración" @@ -5066,7 +5102,7 @@ msgstr "Orden" msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Componente interno" @@ -5124,11 +5160,11 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)" @@ -5168,7 +5204,7 @@ msgstr "Fecha de inicio" msgid "Scheduled start date for this order" msgstr "Fecha de inicio programada para este pedido" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -5477,8 +5513,8 @@ msgstr "Revisado por" msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID del Pedido" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID del pedido a duplicar" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Copiar líneas" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Copiar elementos de línea del pedido original" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Copiar líneas adicionales" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Copiar elementos extra de la línea del pedido original" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Copiar Parámetros" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Partidas" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Duplicar pedido" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Especificar opciones para duplicar este pedido" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "ID de pedido no válido" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:903 +#: order/serializers.py:864 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:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 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:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Moneda de precio de línea" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "Categoría de parte" msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Ubicación Predeterminada" @@ -6259,656 +6251,660 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Partes" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Ya existe un artículo de almacén con este número de serie" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "¡No se pueden asignar partes a las categorías de partes estructurales!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revisión" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "¿Es ésta una parte virtual, como un producto de software o una licencia?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Fecha" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 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:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Requerido" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Validado" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "Moneda de compra de ítem de stock" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Parte original" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Seleccione la parte original a duplicar" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Copiar Imagen" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Copiar imagen desde la parte original" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Copiar BOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Copiar la factura de materiales de la parte original" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Copiar datos del parámetro de la parte original" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Copiar Notas" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "En construcción" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Copiar Imagen" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Copiar imagen desde la parte original" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Copiar BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Copiar la factura de materiales de la parte original" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Copiar Notas" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 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:1594 +#: part/serializers.py:1561 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:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Proporciona soporte nativo para códigos de barras" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Ubicación de stock de destino" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Notas de transacción de stock" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index b43a2c27e3..004bbb4d8b 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -89,7 +89,7 @@ msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -97,16 +97,16 @@ msgstr "Cantidad proporcionada no válida" msgid "Error details can be found in the admin panel" msgstr "Detalles del error pueden encontrarse en el panel de administración" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Ingrese la fecha" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Número decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "El número de referencia es demasiado grande" msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Ruta" @@ -334,7 +334,7 @@ msgstr "Error de servidor" msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Imágen" msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Copiar Parámetros" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Copiar líneas" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Copiar partida del pedido original" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Copiar líneas adicionales" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Copiar partidas extra del pedido original" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Árabe" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "No es un código de moneda válido" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Estado del pedido" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Incluye Variantes" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Categoría" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Consumible" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opcional" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Montaje" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Comprobable" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "En pedido" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Ubicación" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Construir órdenes" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "BOM de ensamblado no ha sido validado" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "La orden de construcción no puede ser creado para una parte inactiva" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "La orden de construcción no puede ser creada para una parte desbloqueada" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Se debe especificar un usuario o grupo responsable" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "La parte del pedido de construcción no puede ser modificada" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Número de orden de construcción o armado" msgid "Reference" msgstr "Referencia" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Breve descripción de la construcción (opcional)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Seleccionar parte a construir o armar" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referencia de orden de venta" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Ubicación de la fuente" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Número de objetos existentes a construir" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Elementos completados" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Número de productos en stock que se han completado" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Estado de la construcción" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Fecha límite de finalización" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Fecha de finalización" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "terminado por" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Link externo" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:961 +#: build/models.py:958 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:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Ensamblar equipo" msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 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:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:233 +#: build/serializers.py:256 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:237 +#: build/serializers.py:260 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:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:643 +#: build/serializers.py:656 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:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:822 +#: build/serializers.py:835 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:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Actualizado" @@ -1608,9 +1644,9 @@ msgstr "Código único del proyecto" msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "El valor no pasa las comprobaciones de validación" msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Precio" @@ -1679,560 +1715,560 @@ msgstr "Precio" msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Clave" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Encabezado" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Título" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publicado" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Resumen" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Leer" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Tipo de modelo destino para esta imagen" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definición" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Comentario" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Conjunto de estado de referencia" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Conjunto de estado extendido con este estado personalizado" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Clave lógica del estado que es igual a este estado personalizado en la lógica de negocios" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Valor" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Valor numérico que se guardará en la base de datos de modelos" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Modelo" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Modelo con el que este estado está asociado" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "La clave debe ser distinta de la clave lógica" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Debe proporcionarse una clase de estado de referencia válida" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "La clave debe ser distinta de las claves lógicas del estado de referencia" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Creado" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Fecha y hora en la que se creó la lista de selección" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Unidades" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Opciones" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Plantilla" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Datos" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Valor del parámetro" msgid "Note" msgstr "Nota" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Respuesta" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Resultado" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Clave" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Componente" @@ -2932,7 +2968,7 @@ msgstr "Componente" msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Comprable" @@ -2940,7 +2976,7 @@ msgstr "Comprable" msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Vendible" @@ -2952,7 +2988,7 @@ msgstr "Las partes se pueden vender por defecto" msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtual" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Fabricante" @@ -4406,7 +4442,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Parte del fabricante" @@ -4424,8 +4460,8 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4493,15 +4529,15 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "costo base" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Paquetes" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "múltiple" @@ -4542,31 +4578,31 @@ msgstr "Fecha de última actualización de los datos de disponibilidad" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Moneda predeterminada utilizada para este proveedor" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "Número de fila" msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Errores" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Válido" @@ -4899,55 +4935,55 @@ msgstr "Ubicación de la Impresora" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Nombre de la máquina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Tipo de Máquina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Tipo de máquina" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Controlador" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Controlador usado para la máquina" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Las máquinas pueden ser desactivadas" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Controlador disponible" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Sin errores" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Inicializado" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Estado de máquina" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Máquina" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "Orden" msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Componente interno" @@ -5124,11 +5160,11 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -5477,8 +5513,8 @@ msgstr "Revisado por" msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID del Pedido" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID del pedido a duplicar" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Copiar líneas" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Copiar partida del pedido original" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Copiar líneas adicionales" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Copiar partidas extra del pedido original" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Copiar Parámetros" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Partidas" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Duplicar pedido" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Especificar opciones para duplicar este pedido" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "ID de pedido inválido" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:903 +#: order/serializers.py:864 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:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 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:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Moneda de precio de línea" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "Categoría de parte" msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Ubicación Predeterminada" @@ -6259,656 +6251,660 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Partes" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Ya existe un artículo de almacén con este número de serie" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "¡No se pueden asignar partes a las categorías de partes estructurales!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revisión" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "¿Es ésta una parte virtual, como un producto de software o una licencia?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Fecha" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 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:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Requerido" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Validado" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "Moneda de compra de ítem de stock" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Parte original" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Seleccione la parte original a duplicar" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Copiar Imagen" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Copiar imagen desde la parte original" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Copiar BOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Copiar la factura de materiales de la parte original" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Copiar datos del parámetro de la parte original" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Copiar Notas" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "En construcción" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Copiar Imagen" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Copiar imagen desde la parte original" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Copiar BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Copiar la factura de materiales de la parte original" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Copiar Notas" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 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:1594 +#: part/serializers.py:1561 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:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Proporciona soporte nativo para códigos de barras" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Ubicación de stock de destino" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Notas de transacción de stock" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index c309fcb56f..5c5e6a0650 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -89,7 +89,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "" @@ -97,16 +97,16 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Pane kuupäev" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "Vigane valik" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Kirjeldus" msgid "Description (optional)" msgstr "Kirjeldus (valikuline)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Tee" @@ -334,7 +334,7 @@ msgstr "Serveri viga" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Pilt" msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Kopeeri parameetrid" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Kopeeri read" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Kopeeri reaüksused algsest tellimusest" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Kopeeri lisareaüksused algsest tellimusest" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Araabia" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Valikuline" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Jälgitud" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Asukoht" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "Tootekood" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Koostamise olek" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Loomise kuupäev" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "Kogus" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Osa nimi" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Tühista kõik laoseisu eraldised mahakantud väljundite jaoks" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Valikained" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Jälgitav" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Saadaval laos" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Uuendatud" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "ID" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Pealkiri" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Avaldatud" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Kokkuvõte" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Loetud" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Pildifail" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Ühiku nimi" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Sümbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definitsioon" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Ühiku definitsioon" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Manus" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Puuduv fail" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Puuduv väline link" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Vali fail, mida lisada" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Kommentaar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Faili suurus" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Silt" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Loodud" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Mall" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Andmed" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "Märkus" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Vöötkoodi andmed" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Vastus" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Tulemus" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Võti" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponent" @@ -2932,7 +2968,7 @@ msgstr "Komponent" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Ostetav" @@ -2940,7 +2976,7 @@ msgstr "Ostetav" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuaalne" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Tootja" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Tarnija" msgid "Select supplier" msgstr "Vali tarnija" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Saadetis" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "Tellimuse ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "Kopeeritava tellimuse ID" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Kopeeri read" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Kopeeri reaüksused algsest tellimusest" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Kopeeri lisareaüksused algsest tellimusest" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Kopeeri parameetrid" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Määrake selle tellimuse dubleerimise valikud" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Vale tellimuse ID" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Vöötkood" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Skännitud ribakood" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Saadetised" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Järgmised seerianumbrid ei ole saadaval" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "Osa kategooria" msgid "Part Categories" msgstr "Osa kategooriad" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Osad" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Osa nimi" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "On mall" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Märksõnad" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Osa kategooria" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimaalne laoseis" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "Testimalle saab luua ainult testitavate osade jaoks" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Originaalosa" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kopeeri pilt" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Kategooria nimi" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Ehitamine" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kopeeri pilt" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Tarnija info" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Minimaalne hind" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Maksimaalne hind" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Uuenda" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index 8f8245ce8f..d198487259 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -89,7 +89,7 @@ msgstr "نمی‌توان {original} را به {unit} تبدیل کرد" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "مقدار ارائه شده نامعتبر است" @@ -97,16 +97,16 @@ msgstr "مقدار ارائه شده نامعتبر است" msgid "Error details can be found in the admin panel" msgstr "جزئیات خطا را می توان در پنل مدیریت پیدا کرد" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "تاریخ را وارد کنید" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "مقدار اعشاری نامعتبر است" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "شماره مرجع خیلی بزرگ است" msgid "Invalid choice" msgstr "انتخاب نامعتبر" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "نام" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "توضیحات" msgid "Description (optional)" msgstr "توضیحات (اختیاری)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "مسیر" @@ -334,7 +334,7 @@ msgstr "خطای سرور" msgid "An error has been logged by the server." msgstr "یک خطا توسط سرور ثبت شده است." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "باید یک عدد معتبر باشد" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "ارز" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "ارز را از گزینه های موجود انتخاب کنید" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "عربی" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "کد ارز معتبر" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "وضعیت سفارش" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "دسته" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "اختیاری" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "مونتاژ" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "سفارش معوق" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "اختصاص داده شده" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "سفارش ساخت" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "مکان" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "سفارش‌های ساخت" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "مرجع سفارش فروش" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "منبع محل" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "مقصد" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "تاریخ تکمیل" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "تکمیل شده توسط" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "صادر شده توسط" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "کاربری که این سفارش ساخت را صادر کرده است" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "پیوند خارجی" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index a3f313bb21..339c413134 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -89,7 +89,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" @@ -97,16 +97,16 @@ msgstr "Annettu määrä on virheellinen" msgid "Error details can be found in the admin panel" msgstr "Virheen tiedot löytyvät hallintapaneelista" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Anna päivämäärä" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Viitenumero on liian suuri" msgid "Invalid choice" msgstr "Virheellinen valinta" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Kuvaus" msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Polku" @@ -334,7 +334,7 @@ msgstr "Palvelinvirhe" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Kuva" msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategoria" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Sijainti" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Linkki ulkoiseen URLiin" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "Määrä" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Seurattavissa" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Päivitetty" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Käyttäjä" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Hinta" @@ -1679,560 +1715,560 @@ msgstr "Hinta" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Salaisuus" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Isäntä" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Otsikko" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Linkki" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Julkaistu" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Julkaisija" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Kuvatiedosto" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Liite" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Puuttuva tiedosto" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Puuttuva ulkoinen linkki" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Valitse liitettävä tiedosto" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Kommentti" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Arvo" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Käytössä" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "Muistiinpano" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Avain" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponentti" @@ -2932,7 +2968,7 @@ msgstr "Komponentti" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Ostettavissa" @@ -2940,7 +2976,7 @@ msgstr "Ostettavissa" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Valmistaja" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Toimittaja" msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "Hinta yhteensä" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Tilauksen valuutta" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Avainsanat" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 8f08c0d619..669e23231f 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -89,7 +89,7 @@ msgstr "Impossible de convertir {original} en {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" @@ -97,16 +97,16 @@ msgstr "Quantité fournie invalide" msgid "Error details can be found in the admin panel" msgstr "Les détails de l'erreur peuvent être trouvées dans le panneau d'administration" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Entrer la date" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Valeur décimale invalide" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Le numéro de référence est trop grand" msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Description" msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Chemin d'accès" @@ -334,7 +334,7 @@ msgstr "Erreur serveur" msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Image" msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" @@ -373,6 +373,46 @@ msgstr "Type de contenu introuvable" msgid "Content type does not match required mixin class" msgstr "Le type de contenu ne correspond pas à la classe de mixin requise" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Copier les paramètres" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Copier des lignes" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Copier les postes de l'ordre original" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Copier les lignes supplémentaires" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Copier les postes supplémentaires de l'ordre original" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabe" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Code de devise invalide" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Statut de la commande" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Fabrication parente" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Inclure les variantes" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Inclure les variantes" msgid "Part" msgstr "Pièce" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Catégorie" @@ -661,125 +701,126 @@ msgstr "Exclure l'arbre" msgid "Build must be cancelled before it can be deleted" msgstr "La construction doit être annulée avant de pouvoir être supprimée" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Consommable" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Facultatif" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Assemblage" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Suivi" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testable" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Commande en cours" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Allouée" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Consommé" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "En Commande" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Emplacement" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Sortie" -#: build/api.py:1107 +#: build/api.py:1120 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:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "La liste des composants de l'assemblage n'a pas été validée" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Impossible de créer un ordre de fabrication pour une pièce inactive" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Impossible de créer un ordre de fabrication pour une pièce non verrouillée" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Les ordres de fabrication ne peuvent être exécutées qu'en externe pour les pièces achetables" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Un utilisateur ou un groupe responsable doit être spécifié" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "La pièce de commande de construction ne peut pas être changée" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "La date cible doit être postérieure à la date de début" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Référence de l' Ordre de Fabrication" msgid "Reference" msgstr "Référence" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Brève description de la fabrication (optionnel)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Commande de fabrication associée à cette fabrication" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:297 +#: build/models.py:294 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:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Sélectionner l'emplacement à partir duquel le stock doit être pris pour cette construction (laisser vide pour prendre à partir de n'importe quel emplacement de stock)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Fabrication externe" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Cet ordre de fabrication est exécuté en externe" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Sélectionnez l'emplacement où les éléments complétés seront stockés" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Nombre de stock items à construire" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Articles terminés" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "État de la construction" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Début de la fabrication" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Date de début prévue pour cet ordre de construction" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Date d'achèvement cible" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Date cible pour l'achèvement de la construction. La construction sera en retard après cette date." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Date d'achèvement" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "achevé par" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Émis par" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Lien vers une url externe" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Code du projet" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:696 +#: build/models.py:693 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:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossible de terminer l'ordre de fabrication avec des sorties incomplètes" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 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:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "Les articles en stock alloués sont toujours en production" -#: build/models.py:1151 +#: build/models.py:1136 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:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Poste de l'ordre de construction" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Création de l'objet" msgid "Quantity" msgstr "Quantité" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Quantité de stock consommé" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 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:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Installer dans" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Niveau de construction" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Nom de l'article" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:237 +#: build/serializers.py:260 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:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Emplacement de stock pour la sortie de la fabrication" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Consommation du stock alloué" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:643 +#: build/serializers.py:656 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:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "L'ordre de construction a des ordres de construction enfants ouverts" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "L'ordre de construction doit être en état de production" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:822 +#: build/serializers.py:835 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:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Référence de la nomenclature" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID de la pièce de la nomenclature" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Nomenclature Nom de la pièce" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Construire" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Pièce fournisseur" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Quantité allouée" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Référence de construction" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Nom de la catégorie de pièces" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Traçable" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Planifié pour fabrication" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Stock externe" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Stock disponible" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Stock de substitution disponible" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Stock de variantes disponibles" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantité consommée dépasse la quantité allouée" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Note optionnelle pour la consommation du stock" -#: build/serializers.py:1762 +#: build/serializers.py:1775 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:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Dupliquer l'allocation de l'article de fabrication" -#: build/serializers.py:1785 +#: build/serializers.py:1798 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:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Dupliquer l'allocation de ligne de fabrication" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Au moins un élément ou une ligne doit être fourni" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Code du projet Étiquette" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Mise à jour" @@ -1608,9 +1644,9 @@ msgstr "Code projet unique" msgid "Project description" msgstr "Description du projet" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "La valeur ne passe pas les contrôles de validation" msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Utilisateur" msgid "Price break quantity" msgstr "Quantité de rupture de prix" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Prix" @@ -1679,560 +1715,560 @@ msgstr "Prix" msgid "Unit price at specified quantity" msgstr "Prix unitaire à la quantité spécifiée" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Point final" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Point de terminaison auquel ce webhook est reçu" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Nom de ce webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Jeton" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Jeton d'accès" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Secret partagé pour HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID message" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Hôte" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Entête" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Corps" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Travaillé sur" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Titre" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lien" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publié" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Auteur" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Résumé" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Lu" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Cette nouvelle a-t-elle été lue ?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Fichier image" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Type de modèle cible pour cette image" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "ID du modèle cible pour cette image" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Unité personnalisée" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Le symbole de l'unité doit être unique" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Le nom de l'unité doit être un identifiant valide" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Nom de l'unité" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbole" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Symbole d'unité facultatif" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Définition" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Définition de l'unité" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Pièce jointe" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Fichier manquant" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Lien externe manquant" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Type de modèle" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Type de modèle cible pour l'image" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Commentaire" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Commentaire sur la pièce jointe" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Date de téléchargement" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Date de téléchargement du fichier" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Taille du fichier" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Taille du fichier en octets" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Type de modèle non valide spécifié pour la pièce jointe" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "État personnalisé" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "États membres de l'Union européenne" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Ensemble d'états de référence" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Ensemble d'états étendu à cet état personnalisé" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Clé logique" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Clé logique de l'état qui est égale à cet état personnalisé dans la logique métier" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Valeur" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Valeur numérique qui sera enregistrée dans la base de données des modèles" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Nom de l'Etat" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Étiquette" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Etiquette qui sera affichée dans le frontend" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Couleur" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Couleur qui sera affichée dans le frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Modèle" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Modèle cet état est associé à" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Le modèle doit être sélectionné" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "La clé doit être sélectionnée" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "La clé logique doit être sélectionnée" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "La clé doit être différente de la clé logique" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Une classe de statut de référence valide doit être fournie" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "La clé doit être différente des clés logiques de l'état de référence" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "La clé logique doit se trouver dans les clés logiques de l'état de référence" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Le nom doit être différent des noms des statuts de référence" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Liste de sélection" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Listes de sélection" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Nom de la liste de sélection" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Description de la liste de sélection" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Verrouillé" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Cette liste de sélection est-elle verrouillée ?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Cette liste de sélection peut-elle être utilisée ?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Plug-in source" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Plugin qui fournit la liste de sélection" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Chaîne source" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Chaîne facultative identifiant la source utilisée pour cette liste" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Entrée par défaut" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Entrée par défaut pour cette liste de sélection" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Créé le" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Date et heure de création de la liste de sélection" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Dernière mise à jour" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Date et heure de la dernière mise à jour de la liste de sélection" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Entrée de la liste de sélection" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Entrées de la liste de sélection" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Liste de sélection à laquelle appartient cette entrée" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Valeur de l'entrée de la liste de sélection" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Étiquette pour l'entrée de la liste de sélection" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Description de l'entrée de la liste de sélection" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Cette entrée de la liste de sélection est-elle active ?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Modèle de paramètre" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Modèle de paramètre" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Les paramètres des cases à cocher ne peuvent pas avoir d'unités" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Les paramètres des cases à cocher ne peuvent pas comporter de choix" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Les choix doivent être uniques" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Le nom du modèle de paramètre doit être unique" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Type de modèle cible pour ce modèle de paramètre" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Nom du paramètre" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Unités" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Unités physiques pour ce paramètre" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Description des paramètres" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Case à cocher" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Ce paramètre est-il une case à cocher ?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Choix" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Choix valables pour ce paramètre (séparés par des virgules)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Liste de sélection pour ce paramètre" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Activé" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Ce modèle de paramètre est-il activé ?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Paramètre" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Paramètres" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Type de modèle non valide pour la pièce jointe" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "Identifiant du Modèle (ID)" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "ID du modèle cible pour ce paramètre" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Modèle" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Modèle de paramètre" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Données" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Valeur du paramètre" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Valeur du paramètre" msgid "Note" msgstr "Note" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Champ de notes facultatif" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Analyse du code-barres" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Données du code-barres" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Utilisateur qui a scanné le code-barres" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Horodatage" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Date et heure du scan de code-barres" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Point d'accès à l'URL qui a traité le code-barres" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Contexte" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Données contextuelles pour la lecture du code-barres" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Réponse" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Données de réponse provenant de la lecture du code-barres" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Résultat" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "La lecture du code-barres a-t-elle réussi ?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Une erreur s'est produite" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8 : La suppression du journal d'e-mail est protégée. Définissez INVENTREE_PROTECT_EMAIL_LOG à False pour permettre la suppression." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "Message email" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "Messages email" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Annoncé" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Envoyé" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Échec" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Livré" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Confirmé" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Entrant" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Sortant" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Sans réponse" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Suivi de livraison" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Suivi de la lecture" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Suivi du clic" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifiant pour ce message (peut être fourni par un système externe)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "ID du sujet de discussion" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifiant pour ce fil de message (peut être fourni par un système externe)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Fil de discussion" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Fil lié à ce message" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Priorité" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "Fil d'Email" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "Fils d'Emails" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Clé" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Clé unique pour ce fil (utilisée pour identifier le fil)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Identifiant unique pour ce fil" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Démarré en interne" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Est-ce que ce fil a été démarré en interne ?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Date et heure de création du fil" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Date et heure de dernière mise à jour du fil" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Composant" @@ -2932,7 +2968,7 @@ msgstr "Composant" msgid "Parts can be used as sub-components by default" msgstr "Les pièces peuvent être utilisées comme sous-composants par défaut" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Achetable" @@ -2940,7 +2976,7 @@ msgstr "Achetable" msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Vendable" @@ -2952,7 +2988,7 @@ msgstr "Les pièces sont vendables par défaut" msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuelle" @@ -4215,8 +4251,8 @@ msgstr "La pièce interne est active" msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Fabricant" @@ -4406,7 +4442,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Pièces du fabricant" @@ -4424,8 +4460,8 @@ msgstr "Sélectionner une partie" msgid "Select manufacturer" msgstr "Sélectionner un fabricant" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "Référence fabricant" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Fournisseur" msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" @@ -4493,15 +4529,15 @@ msgstr "Lien de la pièce du fournisseur externe" msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "coût de base" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Conditionnement" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "plusieurs" @@ -4542,31 +4578,31 @@ msgstr "Date de dernière mise à jour des données de disponibilité" msgid "Supplier Price Break" msgstr "Rupture de prix pour le fournisseur" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Devise par défaut utilisée pour ce fournisseur" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Nom de l'entreprise" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Ruptures de prix" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Une erreur s'est produite lors de l'exportation des données" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Le plugin d'exportation de données renvoie un format de données incorrect" @@ -4735,11 +4771,11 @@ msgstr "Index des lignes" msgid "Original row data" msgstr "Données de la ligne d'origine" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Erreurs" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Valide" @@ -4899,55 +4935,55 @@ msgstr "Emplacement Imprimante" msgid "Scope the printer to a specific location" msgstr "Porter de l'imprimante sur un emplacement spécifique" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Nom de la machine" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Machine Type" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Type de machine" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Pilote" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Pilote utilisé pour la machine" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Les machines peuvent être inactivées" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Pilote disponible" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Aucune erreur" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Initialisé" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Statut de la machine" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Machine" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Configuration de la machine" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Type de configuration" @@ -5066,7 +5102,7 @@ msgstr "Commande" msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Pièces Internes" @@ -5124,11 +5160,11 @@ msgstr "Prix Total" msgid "Total price for this order" msgstr "Prix total pour cette commande" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Devise de la commande" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Devise de cette commande (laisser vide pour utiliser la devise par défaut de l'entreprise)" @@ -5168,7 +5204,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:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Date Cible" @@ -5477,8 +5513,8 @@ msgstr "Vérifié par" msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envoi" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantité doit être égale à 1 pour un article de stock sérialisé" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID de commande" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID de l'ordre à dupliquer" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Copier des lignes" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Copier les postes de l'ordre original" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Copier les lignes supplémentaires" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Copier les postes supplémentaires de l'ordre original" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Copier les paramètres" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Postes de travail" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Lignes achevées" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Duplicata de commande" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Spécifier les options de duplication de cette commande" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "ID de commande invalide" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Nom du fournisseur" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "La commande comporte des postes incomplets" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Tarification automobile" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Fusionner des éléments" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Numéro de pièce interne" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Nom de la pièce interne" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "La pièce du fournisseur doit être spécifiée" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Le bon de commande doit être spécifié" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Le fournisseur doit correspondre au bon de commande" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Le bon de commande doit correspondre au fournisseur" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Poste" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Sélectionner le lieu de destination des envois reçus" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Saisir le code de lot pour les articles de stock entrant" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Date d'expiration" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Saisir la date d'expiration des articles de stock entrant" -#: order/serializers.py:919 +#: order/serializers.py:880 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:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Remplacer les informations d'emballage pour les articles en stock entrants" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Note supplémentaire pour les articles en stock entrant" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Code-barres scanné" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Les postes doivent être fournis" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "L'emplacement de la destination doit être spécifié" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Les valeurs de code-barres fournies doivent être uniques" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Envois" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Envois terminés" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "Lignes allouées" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Postes alloués" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Aucun détail sur l'expédition n'est fourni" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Le poste n'est pas associé à cette commande" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "La quantité doit être positive" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "L'envoi a déjà été effectué" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "L'envoi n'est pas associé à cette commande" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 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:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Les numéros de série suivants sont indisponibles" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Poste de commande de retour" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Le poste ne correspond pas à l'ordre de retour" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Le poste a déjà été reçu" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Quantité à retourner" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Devise du prix de la ligne" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "A des révisions" msgid "BOM Valid" msgstr "Nomenclature valide" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Catégories en cascade" -#: part/api.py:996 +#: part/api.py:998 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:1002 +#: part/api.py:1004 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:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "La pièce d'assemblage est active" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "La pièce d'assemblage est traçable" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "La pièce d'assemblage est testable" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Le composant est testable" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Utilise" @@ -6210,7 +6202,7 @@ msgstr "Catégorie de composant" msgid "Part Categories" msgstr "Catégories de composants" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Emplacement par défaut" @@ -6259,656 +6251,660 @@ msgstr "Valeur par Défaut" msgid "Default Parameter Value" msgstr "Valeur par défaut du paramètre" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Pièces" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Impossible de supprimer cette partie car elle est verrouillée" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Impossible de supprimer cette partie car elle est toujours active" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Impossible de supprimer cette pièce car elle est utilisée dans un assemblage" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "La partie \"{self}\" ne peut pas être utilisée dans la nomenclature de \"{parent}\" (récursif)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "La partie \"{parent}\" est utilisée dans la nomenclature de \"{self}\" (récursif)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "L'IPN doit correspondre au modèle de regex {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Une partie ne peut pas être une révision d'elle-même" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Les révisions ne sont autorisées que pour les pièces d'assemblage" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Impossible d'effectuer une révision d'un modèle de pièce" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "La partie parentale doit pointer vers le même modèle" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Il existe déjà un article en stock avec ce numéro de série" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La révision de la pièce existe déjà en double." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Une pièce avec ce nom, IPN et révision existe déjà." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Les pièces ne peuvent pas être affectées à des catégories de pièces structurelles !" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Nom de l'article" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Est un modèle" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Cette pièce est-elle une pièce modèle ?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Cette pièce est-elle une variante d'une autre pièce ?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Description de la pièce (facultatif)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Mots-clés" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Les mots-clés partiels pour améliorer la visibilité dans les résultats de recherche" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Numéro de révision ou de version de la pièce" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Révision" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Cette partie est-elle une révision d'une autre partie ?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Révision de" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Où cet article est-il normalement stocké ?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Expiration par défaut" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Délai d'expiration (en jours) pour les articles en stock de cette pièce" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Stock Minimum" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Niveau de stock minimum autorisé" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Unités de mesure pour cette partie" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Cette pièce peut-elle être fabriquée à partir d'autres pièces ?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Cette pièce peut-elle être utilisée pour construire d'autres pièces ?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Cette partie dispose-t-elle d'un suivi pour les articles uniques ?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Des résultats de tests peuvent-ils être enregistrés pour cette pièce ?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Cette pièce peut-elle être achetée auprès de fournisseurs externes ?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Cette pièce peut-elle être vendue aux clients ?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Est-ce que cette pièce est active ?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Les parties verrouillées ne peuvent pas être modifiées" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "S'agit-il d'un élément virtuel, tel qu'un logiciel ou une licence ?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "Nomenclature validée" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Est-ce que la nomenclature pour cette pièce est correcte ?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "Somme de contrôle de la nomenclature" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Somme de contrôle de la nomenclature enregistrée" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Nomenclature vérifiée par" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Date de vérification de la nomenclature" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Création Utilisateur" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Devise utilisée pour cacher les calculs de prix" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Coût minimum de la nomenclature" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Coût minimal des composants" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Coût maximal de la nomenclature" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Coût maximal des composants" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Coût d'achat minimum" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Coût d'achat historique minimum" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Coût d'achat maximum" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Coût d'achat historique maximum" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Prix interne minimum" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Coût minimum basé sur des ruptures de prix internes" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Prix interne maximum" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Coût maximum basé sur les écarts de prix internes" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Prix minimum du fournisseur" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Prix minimum des pièces provenant de fournisseurs externes" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Prix maximum du fournisseur" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Prix maximum des pièces provenant de fournisseurs externes" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Coût minimum de la variante" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Calcul du coût minimum des pièces de la variante" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Coût maximal de la variante" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Calcul du coût maximal des pièces de la variante" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Coût minimal" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Remplacer le coût minimum" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Coût maximal" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Dépassement du coût maximal" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Calcul du coût minimum global" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Calcul du coût maximum global" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Prix de vente minimum" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Prix de vente minimum basé sur des ruptures de prix" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Prix de vente maximum" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Prix de vente maximum en fonction des écarts de prix" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Coût minimum de vente" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Prix de vente historique minimum" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Coût de vente maximum" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Prix de vente historique maximum" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Partie pour l'inventaire" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Nombre d'articles" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Nombre d'entrées individuelles au moment de l'inventaire" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Stock total disponible au moment de l'inventaire" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Date" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Date de l'inventaire" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Coût minimum du stock" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Coût minimum estimé des stocks disponibles" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Coût maximal du stock" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Coût maximum estimé des stocks disponibles" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Vente de pièces détachées Prix cassé" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Modèle de test partiel" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 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:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Entrez un nom pour le test" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Clé de test" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Clé simplifiée pour le test" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Description du test" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Saisir la description de ce test" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Ce test est-il activé ?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Requis" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Ce test est-il obligatoire pour passer l'examen ?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Nécessite une pièce jointe" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Choix valables pour ce test (séparés par des virgules)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 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:4084 +#: part/models.py:4088 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:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Sélectionner la partie parentale" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Sous-partie" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Sélectionner la pièce à utiliser dans la nomenclature" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Quantité de nomenclature pour ce poste de nomenclature" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Ce poste de nomenclature est facultatif" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Définir la quantité" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Attrition" -#: part/models.py:4155 +#: part/models.py:4159 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:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Arrondi au multiple" -#: part/models.py:4168 +#: part/models.py:4172 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:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Référence du poste de nomenclature" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Notes sur les postes de nomenclature" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Somme de contrôle" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Somme de contrôle de la ligne de nomenclature" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Validée" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Ce poste de nomenclature a été validé" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Obtient l'héritage" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 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:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "La sous-partie doit être spécifiée" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Remplacement d'un poste de nomenclature" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Poste de nomenclature parent" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Pièce de rechange" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Première partie" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Partie 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Sélectionner une partie connexe" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Note pour cette relation" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Une relation en double existe déjà" @@ -6956,331 +6952,319 @@ msgstr "Devise d'achat de l'item" msgid "File is not an image" msgstr "Le fichier n'est pas une image" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Partie originale" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Sélectionner la partie originale à dupliquer" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Copier l'image" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Copier l'image à partir de la partie originale" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Copier la nomenclature" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Copie de la nomenclature de la pièce originale" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Copie des données de paramètres de la pièce d'origine" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Notes sur la copie" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Copier les notes de la partie originale" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Test Copie" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Quantité de stock initial" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Emplacement initial du stock" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Spécifier l'emplacement du stock initial pour cette pièce" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Sélectionner le fournisseur (ou laisser en blanc pour passer)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Sélectionner le fabricant (ou laisser en blanc pour ignorer)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Numéro de pièce du fabricant" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "L'entreprise sélectionnée n'est pas un fournisseur valide" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "L'entreprise sélectionnée n'est pas un fabricant valide" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "La pièce du fabricant correspondant à ce MPN existe déjà" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "La pièce du fournisseur correspondant à cette UGS existe déjà" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Nom catégorie" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Construction" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Quantité de cette pièce actuellement en production" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantité exceptionnelle de cette pièce sont planifié à la fabrication" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Éléments en stock" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Révisions" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Stock total" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Stock non attribué" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Variante Stock" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Dupliquer une pièce" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Copier les données initiales d'une autre partie" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Copier l'image" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Copier l'image à partir de la partie originale" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Copier la nomenclature" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Copie de la nomenclature de la pièce originale" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Notes sur la copie" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Copier les notes de la partie originale" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Test Copie" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Stock initial" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Créer une pièce avec une quantité de stock initiale" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Informations sur le fournisseur" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Ajouter les informations initiales du fournisseur pour cette pièce" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Copier les paramètres de la catégorie" -#: part/serializers.py:1036 +#: part/serializers.py:1003 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:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Image existante" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Nom de fichier d'une image de pièce existante" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Le fichier image n'existe pas" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Valider l'ensemble de la nomenclature" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Peut construire" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Nécessaire pour fabrication" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Alloué à la fabrication" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Nécessaire pour les commandes" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Alloué aux commandes" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Remplacer la valeur calculée pour le prix minimum" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Prix minimum monnaie" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Remplacer la valeur calculée pour le prix maximum" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Devise du prix maximum" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Mise à jour" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Mise à jour des prix pour cette pièce" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 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:1594 +#: part/serializers.py:1561 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:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Sélectionner l'assemblage parent" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Sélectionner le composant" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Sélectionner la pièce à partir de laquelle copier la nomenclature" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Supprimer les données existantes" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Supprimer les postes de nomenclature existants avant de les copier" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Inclure l'héritage" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Sauter les lignes non valides" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Activez cette option pour ignorer les lignes non valides" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Copier les pièces de remplacement" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Prise en charge native des codes-barres" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Préfixe du code-barres abrégé" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Personnaliser le préfixe utilisé pour les codes-barres courts, peut être utile pour les environnements avec plusieurs instances InvenTree" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" 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:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Emplacement du stock de destination" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Notes sur les transactions boursières" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Numéro de série suivant" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Numéro de série précédent" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index bf5991c353..73d3e7ce90 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -89,7 +89,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "" @@ -97,16 +97,16 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "הזן תאריך סיום" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "מספר האסמכתה גדול מדי" msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "שם" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "תיאור" msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "נתיב" @@ -334,7 +334,7 @@ msgstr "שגיאת שרת" msgid "An error has been logged by the server." msgstr "נרשמה שגיאה על ידי השרת." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "מטבע" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "בחר מטבע מהאפשרויות הזמינות" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "ערבית" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "מקור הבנייה" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "מקט" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "בחר רכיב לבנייה" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "כמות בניה" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "קישור חיצוני" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "כמות" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "משתמש" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "קישור" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "קובץ מצורף" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "קובץ חסר" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "בחר קובץ לצירוף" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "הערה" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 9608bf8ee7..6a0a56b1d3 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -89,7 +89,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "" @@ -97,16 +97,16 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "तारीख दर्ज करें" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "" @@ -334,7 +334,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index e36e2dc8c1..8236fa9849 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -89,7 +89,7 @@ msgstr "{original} átváltása {unit}-ra sikertelen" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" @@ -97,16 +97,16 @@ msgstr "Nem megfelelő mennyiség" msgid "Error details can be found in the admin panel" msgstr "A hiba részleteit megtalálod az admin panelen" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Dátum megadása" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Érvénytelen decimális érték" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Azonosító szám túl nagy" msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Név" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Leírás" msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Elérési út" @@ -334,7 +334,7 @@ msgstr "Kiszolgálóhiba" msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Kép" msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" @@ -373,6 +373,46 @@ msgstr "Tartalomtípus nem található" msgid "Content type does not match required mixin class" msgstr "A tartalomtípus nem egyezik a szükséges mixin osztállyal" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Paraméterek másolása" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Sorok másolása" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Sortételek másolása az eredeti rendelésről" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Extra sorok másolása" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Az eredeti rendelés extra tételeinek másolása" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arab" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Rendelés állapota" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Szülő gyártás" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Változatokkal együtt" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Változatokkal együtt" msgid "Part" msgstr "Alkatrész" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategória" @@ -661,125 +701,126 @@ msgstr "Fa kihagyása" msgid "Build must be cancelled before it can be deleted" msgstr "A gyártást be kell fejezni a törlés előtt" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opcionális" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Gyártmány" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Követett" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Ellenőrizhető" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Befejezetlen rendelés" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Felhasználva" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Rendelve" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "Gyártás nem található" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 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:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Hely" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Kimenet" -#: build/api.py:1107 +#: build/api.py:1120 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:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Gyártási utasítások" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Az alkatrészjegyzék még nincs jóváhagyva" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Nem lehet inaktív alkatrészre Gyártást kezdeményezni" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Nem lehet lezáratlan alkatrészre Gyártást kezdeményezni" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Gyártási rendeléseket kizárólag beszerezhető alkatrészekkel lehet külső forrásból teljesíteni" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Meg kell adni felelős felhasználót vagy csoportot" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Gyártási rendelés alkatrész nem változtatható" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Céldátumnak a kezdeti dátum után kell lennie" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Gyártási utasítás azonosító" msgid "Reference" msgstr "Azonosító" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Gyártás rövid leírása (opcionális)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Gyártási megrendelés, amelyhez ez a gyártás hozzá van rendelve" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Válassz alkatrészt a gyártáshoz" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Vevői rendelés azonosító" -#: build/models.py:297 +#: build/models.py:294 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:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Forrás hely" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Válassz helyet ahonnan készletet vegyünk el ehhez a gyártáshoz (hagyd üresen ha bárhonnan)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Külső gyártás" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Ez a gyártási rendelés külsőleg teljesül" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Cél hely" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Válassz helyet ahol a kész tételek tárolva lesznek" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Gyártási mennyiség" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Gyártandó készlet tételek száma" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Kész tételek" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Elkészült készlet tételek száma" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Gyártási állapot" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Létrehozás dátuma" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Gyártás kezdeti dátuma" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Gyártási rendelés ütemezett kezdeti dátuma" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Befejezés cél dátuma" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cél dátum a gyártás befejezéséhez. Ez után késettnek számít majd." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Befejezés dátuma" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "elkészítette" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Indította" -#: build/models.py:402 +#: build/models.py:399 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:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Felelős" -#: build/models.py:420 +#: build/models.py:417 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:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Külső link" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link külső URL-re" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Projektszám" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:696 +#: build/models.py:693 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:701 +#: build/models.py:698 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:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:961 +#: build/models.py:958 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:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 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:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "A lefoglalt készletelemek még gyártás alatt vannak" -#: build/models.py:1151 +#: build/models.py:1136 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:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Gyártási Rendelés Sor Tétel" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,457 +1060,457 @@ msgstr "Gyártás objektum" msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Felhasznált készlet mennyisége" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "A lefoglalt mennyiségnek nullánál nagyobbnak kell lennie" -#: build/models.py:1931 +#: build/models.py:1962 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:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Gyártási Szint" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Alkatrész neve" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:233 +#: build/serializers.py:256 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:237 +#: build/serializers.py:260 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:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:345 +#: build/serializers.py:380 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:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Legyártott készlet helye" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "A Gyártásnak nyitott leszármazott Gyártása van" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "A Gyártásnak folyamatban kell lennie" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:822 +#: build/serializers.py:835 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:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1042 +#: build/serializers.py:1055 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:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "Összes elem" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "Nem követett tételek" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "Követett tételek" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "Tétel típusa" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "Válasszon tétel típust az automatikus foglaláshoz" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Alkatrészjegyzék Hivatkozás" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "Alkatrészjegyzék Cikk Azonosító" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Alkatrészjegyzék Alkatrész Név" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "Beépítés helye" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Gyártás" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Beszállítói alkatrész" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Lefoglalt mennyiség" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Gyártási Hivatkozás" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Alkatrész kategória Neve" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Követésre kötelezett" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Gyártás Ütemezve" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Külső raktárkészlet" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Elérhető Helyettesítő Készlet" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Elérhető Készlet Változatokból" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "Felhasznált mennyiség meghaladja a lefoglalt mennyiséget" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Megjegyzés a készletfelhasználáshoz" -#: build/serializers.py:1762 +#: build/serializers.py:1775 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:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Dupla gyártási tétel lefoglalás" -#: build/serializers.py:1785 +#: build/serializers.py:1798 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:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Duplikált gyártási sor foglalás" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Legalább egy tétel vagy sor megadása kötelező" @@ -1585,7 +1621,7 @@ msgstr "" msgid "Project Code Label" msgstr "Projekt kód címke" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Frissítve" @@ -1609,9 +1645,9 @@ msgstr "Egyedi projektszám" msgid "Project description" msgstr "Projekt leírása" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1657,10 +1693,10 @@ msgstr "Az érték nem felel meg az ellenőrzéseknek" msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1671,7 +1707,7 @@ msgstr "Felhasználó" msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Ár" @@ -1680,560 +1716,560 @@ msgstr "Ár" msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Titok" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Fejléc" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Törzs" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Azonosító" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Cím" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Közzétéve" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Szerző" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Elolvasva" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Elolvasva?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Képfájl" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "A képhez tartozó model típus" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "A képhez tartozó model azonosító" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Egyedi mértékegység" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "A mértékegység szimbólumának egyedinek kell lennie" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "A mértékegységnek valós azonosítónak kell lennie" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Egység neve" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Szimbólum" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Opcionális mértékegység szimbólum" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definíció" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Mértékegység definíció" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Melléklet" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Hiányzó fájl" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Hiányzó külső link" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Modell típusa" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Képhez tartozó model típus" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Válaszd ki a mellekelni kívánt fájlt" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Megjegyzés" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Melléklet megjegyzés" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Feltöltés dátuma" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "A fájl feltöltésének dátuma" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Fájl mérete" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Fájlméret bájtban" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "A melléklet model típusa érvénytelen" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Egyedi Állapot" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Egyedi Állapotok" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Hivatkozott Állapot Készlet" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Az az Állapot készlet, melyet ez az egyedi állapot kibővít" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logikai kulcs" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Az állapot logikai kulcsa amely megegyezik az üzleti logika egyedi állapotával" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Érték" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "A model adatbázisba tárolandó szám" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Az állapot neve" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Címke" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "A felületen megjelenített címke" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Szín" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "A felöleten megjelenő szín" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "A Model amihez ez az állapot tartozik" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Modelt választani kötelező" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Kulcsot választani kötelező" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Logikai kulcsot választani kötelező" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "A kulcs és a logikai kulcs nem lehet azonos" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Helyes hivatkozási állapot osztályt kell megadni" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "A kulcsnak eltérőnek kell lennie a hivatkozott állapotok logikai kulcsaitól" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "A logikai kulcsnak szerepelnie kell a hivatkozott állapotok logikai kulcsai közt" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "A Névnek el kell térnie a referencia állapotok neveitől" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Választéklista" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Választéklisták" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Választéklista neve" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Választéklista leírása" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Lezárt" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Választéklista lezárva?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Választéklista használható?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Forrás plugin" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Választéklista szolgáltató plugin" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Forrás szöveg" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Elhagyható lista forrás azonosító szöveg" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Alapértelmezett bejegyzés" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Alapértelmezett elem ezen a listán" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Létrehozva" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Választéklista létrehozási dátuma és ideje" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Utoljára módosítva" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "A választéklista utolsó módosításának dátuma és ideje" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Választéklista bejegyzés" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Választéklista bejegyzések" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Választéklista amihez ez a bejegyzés tartozik" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Választéklista bejegyzés értéke" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Választéklista bejegyzés felirata" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Választéklista bejegyzés leírása" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Választéklista bejegyzés aktív?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Paraméter sablon" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Paraméter Sablonok" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Célmodell típusa ehhez a paramétersablonhoz" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Paraméter neve" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Mértékegység" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Paraméter leírása" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Lehetőségek" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "A paraméter választéklistája" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Engedélyezve" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Ez a paramétersablon engedélyezett?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Paraméter" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Paraméterek" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Érvénytelen modelltípus megadva a paraméterhez" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "Modell ID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "A célmodell azonosítója ehhez a paraméterhez" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Sablon" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Paraméter sablon" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Adat" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Paraméter értéke" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2244,181 +2280,181 @@ msgstr "Paraméter értéke" msgid "Note" msgstr "Megjegyzés" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Vonalkód beolvasás" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Vonalkód adat" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Melyik felhasználó olvasta be a vonalkódot" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Időbélyeg" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Vonalkód beolvasás dátuma és ideje" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Vonalkód feldolgozó URL végpont" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Kontextus" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Vonalkód olvasás kontextus adat" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Válasz" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Vonalkód olvasó válasz adat" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Eredmény" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Vonalkód olvasás sikeres volt?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Hiba történt" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Email napló törlés védett. Állítsd be az INVENTREE_PROTECT_EMAIL_LOG-ot False-ra hogy engedélyezd a törlést." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "E-mail üzenet" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "E-mail üzenetek" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Bejelentve" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Elküldve" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Megbukott" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Kiszállítva" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Megerősítve" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Bejövő" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Kimenő" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Nincs válasz" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Kiszállítás követése" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Olvasási visszaigazolás" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Kattintások nyomkövetése" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "Globális ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Üzenet azonosítója (külső rendszertől származhat)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "Szál ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Üzenet-sor azonosító (külső rendszerből származhat)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Szál" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Ehhez az üzenethez kapcsolódó üzenet-lánc" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Prioritás" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "Email szál" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "Email szálak" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Kulcs" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Az üzenetlánc egyedi azonosítója (az üzenetlánc azonosítására szolgál)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Üzenetlánc egyedi azonosítója" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Belső kezdés" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Ez az üzenetlánc belül indult?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Az üzenetlánc kezdeti dátuma és ideje" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Az üzenetlánc utolsó módosításának dátuma és ideje" @@ -2924,8 +2960,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Összetevő" @@ -2933,7 +2969,7 @@ msgstr "Összetevő" msgid "Parts can be used as sub-components by default" msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Beszerezhető" @@ -2941,7 +2977,7 @@ msgstr "Beszerezhető" msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Értékesíthető" @@ -2953,7 +2989,7 @@ msgstr "Alkatrészek alapból eladhatók legyenek" msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuális" @@ -4216,8 +4252,8 @@ msgstr "A saját alkatrész Aktív" msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Gyártó" @@ -4407,7 +4443,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" @@ -4425,8 +4461,8 @@ msgstr "Válassz alkatrészt" msgid "Select manufacturer" msgstr "Gyártó kiválasztása" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN (Gyártói cikkszám)" @@ -4454,8 +4490,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4466,7 +4502,7 @@ msgstr "Beszállító" msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" @@ -4494,15 +4530,15 @@ 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:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "alap költség" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Csomagolás" @@ -4519,7 +4555,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "többszörös" @@ -4543,31 +4579,31 @@ msgstr "Utolsó elérhetőségi adat frissítés" msgid "Supplier Price Break" msgstr "Beszállítói Ár Kedvezmény" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Beszállító által használt alapértelmezett pénznem" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Cégnév" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Készleten" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Árkategóriák" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Hiba történt adatexportálás közben" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Az adatexportáló plugin téves adatformátumot adott vissza" @@ -4736,11 +4772,11 @@ msgstr "Sor száma" msgid "Original row data" msgstr "Eredeti sor adat" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Hibák" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Érvényes" @@ -4900,55 +4936,55 @@ msgstr "Nyomtató helye" msgid "Scope the printer to a specific location" msgstr "Nyomtató korlátozása egy készlethelyhez" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Gép neve" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Géptípus" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Gép típusa" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Illesztőprogram" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Berendezéshez használható meghajtó" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "A berendezések letilthatók" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Meghajtó elérhető" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Nincsen hiba" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Inicializálva" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Gép állapot" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Gép" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Gép konfiguráció" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Konfiguráció típusa" @@ -5067,7 +5103,7 @@ msgstr "Rendelés" msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Belső alkatrész" @@ -5125,11 +5161,11 @@ msgstr "Teljes ár" msgid "Total price for this order" msgstr "A rendelés teljes ára" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Rendelés pénzneme" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Megrendeléshez használt pénznem (hagyd üresen a cégnél alapértelmezetthez)" @@ -5169,7 +5205,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:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cél dátum" @@ -5478,8 +5514,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:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Szállítmány" @@ -5545,8 +5581,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 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" @@ -5686,39 +5722,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "Rendelés azonosító" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "A duplikálandó megrendelés száma" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Sorok másolása" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Sortételek másolása az eredeti rendelésről" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Extra sorok másolása" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Az eredeti rendelés extra tételeinek másolása" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Paraméterek másolása" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5726,287 +5730,275 @@ msgstr "" msgid "Line Items" msgstr "Sortételek" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Kész sorok" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Rendelés duplikálása" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Rendelés másolás beállításai" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Érvénytelen rendelés ID" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Beszállító neve" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Belső cikkszám" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:825 +#: order/serializers.py:786 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:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Lejárati dátum" -#: order/serializers.py:911 +#: order/serializers.py:872 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:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:929 +#: order/serializers.py:890 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:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Kiegészítő megjegyzés beérkező készlettételekhez" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Szállítások" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Foglalt tételek" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Az alábbi sorozatszámok nem elérhetők" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Visszaküldési mennyiség" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Sortétel pénzneme" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6146,59 +6138,59 @@ msgstr "Vannak Változatok" msgid "BOM Valid" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Kaszkád Kategóriák" -#: part/api.py:996 +#: part/api.py:998 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:1002 +#: part/api.py:1004 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:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Összeállított Alkatrész ellenőrizhető" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Összetevő alkatrész ellenőrizhető" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Használ" @@ -6211,7 +6203,7 @@ msgstr "Alkatrész kategória" msgid "Part Categories" msgstr "Alkatrész kategóriák" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Alapértelmezett hely" @@ -6260,656 +6252,660 @@ msgstr "Alapértelmezett érték" msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Alkatrészek" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Nem lehet törölni egy zárolt alkatrész paramétereit" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Nem lehet módosítani egy zárolt alkatrész paramétereit" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Lezárt alkatrész nem törölhető" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Aktív alkatrész nem törölhető" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Összeállításban felhasznált alkatrész nem törölhető" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Az '{self}' alkatrész nem használható a '{parent}' alkatrészjegyzékében (mert rekurzív lenne)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Az '{parent}' alkatrész szerepel a '{self}' alkatrészjegyzékében (rekurzív)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Az IPN belső cikkszámnak illeszkednie kell a {pattern} regex mintára" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Alkatrész nem lehes saját magának verziója" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Verziók csak összeállított alkatrészeknél engedélyezettek" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Nem lehet sablon alkatrészből új verziót csinálni" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "A szülő alkatrésznek azonos sablonra kell mutatnia" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Létezik már készlet tétel ilyen a sorozatszámmal" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Azonos IPN nem engedélyezett az alkatrészekre, már létezik ilyen" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Adott alkatrész verzióból már létezik egy." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Ilyen nevű, IPN-ű és reviziójú alkatrész már létezik." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Alkatrész leírása (opcionális)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Kulcsszavak" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Alkatrész kulcsszavak amik segítik a megjelenést a keresési eredményekben" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Belső Cikkszám)" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Alkatrész változat vagy verziószám (pl. szín, hossz, revízió, stb.)" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Változat" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Ez egy másik alkatrész egy verziója?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Ennek a verziója" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Lejárati idő (napban) ennek az alkatrésznek a készleteire" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimális készlet" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Gyártható-e ez az alkatrész más alkatrészekből?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Felhasználható-e ez az alkatrész más alkatrészek gyártásához?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Kell-e külön követni az egyes példányait ennek az alkatrésznek?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Lehet ehhez az alkatrészhez több ellenőrzési eredményt rögzíteni?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Rendelhető-e ez az alkatrész egy külső beszállítótól?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Értékesíthető-e önmagában ez az alkatrész a vevőknek?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Lezárt alkatrészt nem lehet szerkeszteni" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ez egy virtuális nem megfogható alkatrész, pl. szoftver vagy licenc?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Az alkatrész anyagjegyzéke érvényes?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Dátum" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Alkatrész értékesítési ársáv" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Alkatrész Teszt Sablon" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 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:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Teszt azonosító" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Teszt engedélyezve?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Kötelező" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Választható lehetőségek ehhez a Teszthez (vesszővel elválasztva)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 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:4084 +#: part/models.py:4088 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:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Beállítás mennyiség" -#: part/models.py:4145 +#: part/models.py:4149 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:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Veszteség" -#: part/models.py:4155 +#: part/models.py:4159 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:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Kerekítési többszörös" -#: part/models.py:4168 +#: part/models.py:4172 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:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 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:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Kapcsolati megjegyzés" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" @@ -6957,331 +6953,319 @@ msgstr "Beszerzési pénzneme ennek a készlet tételnek" msgid "File is not an image" msgstr "A fájl nem kép" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Eredeti alkatrész" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Válassz eredeti alkatrészt a másoláshoz" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kép másolása" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Kép másolása az eredeti alkatrészről" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Alkatrészjegyzék másolása" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Paraméterek másolása az eredeti alkatrészről" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Megjegyzések másolása" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Megjegyzések másolása az eredeti alkatrészről" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Teszt másolása" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Teszt sablonok másolása az eredeti alkatrészről" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:510 +#: part/serializers.py:450 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:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Kategória neve" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Gyártásban" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Az alkatrészből jelenleg ennyi van gyártás alatt" -#: part/serializers.py:892 +#: part/serializers.py:833 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:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Készlet tételek" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Verziók" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Teljes készlet" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kép másolása" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Kép másolása az eredeti alkatrészről" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Alkatrészjegyzék másolása" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Megjegyzések másolása" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Megjegyzések másolása az eredeti alkatrészről" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Teszt másolása" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Teszt sablonok másolása az eredeti alkatrészről" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:1036 +#: part/serializers.py:1003 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:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Gyártható" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Gyártásokhoz szükséges" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Gyártási rendelésekhez foglalva" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Értékesítési rendeléshez szükséges" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Értékesítési rendeléshez lefoglalva" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Minimum ár" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Maximum ár" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Szülő összeállítás kiválasztása" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Összetevő alkatrész kijelölése" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:2041 +#: part/serializers.py:2008 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:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:2059 +#: part/serializers.py:2026 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" @@ -7598,7 +7582,7 @@ msgid "Provides native support for barcodes" msgstr "Alapvető vonalkód támogatást ad" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7642,11 +7626,11 @@ msgstr "Rövid Vonalkód Előtag" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "A rövid vonalkódok előtagjának beállítása hasznos lehet, ha több InvenTree példányt is használnak egy környezetben" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Automatikus Gyártás létrehozás" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Összeszerelésekhez automatikus gyártási rendelés készítése" @@ -9454,8 +9438,8 @@ msgstr "Nincsen készlettétel megadva" 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:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Cél készlet hely" @@ -9627,7 +9611,7 @@ msgstr "Készlettétel már készleten van" msgid "Quantity must not be negative" msgstr "Mennyiség nem lehet negatív" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "Meglévő készletbe olvasztás" @@ -9643,15 +9627,20 @@ msgstr "Készlet tranzakció megjegyzései" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 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:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Következő sorozatszám" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Előző Sorozatszám" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index 2d5ae34034..f99f833013 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -89,7 +89,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" @@ -97,16 +97,16 @@ msgstr "Jumlah yang diberikan tidak valid" msgid "Error details can be found in the admin panel" msgstr "Detail terkait galat dapat dilihat di panel admin" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Masukkan tanggal" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Keterangan" msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Direktori" @@ -334,7 +334,7 @@ msgstr "Terjadi Kesalahan Server" msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Salin Baris" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Bahasa Arab" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Produksi Induk" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Order Produksi" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Lokasi" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Order Produksi" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Referensi Order Produksi" msgid "Reference" msgstr "Referensi" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Pilih bagian untuk diproduksi" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referensi Order Penjualan" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Lokasi Sumber" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Pilih dari lokasi mana stok akan diambil untuk produksi ini (kosongkan untuk mengambil stok dari mana pun)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Lokasi Tujuan" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Pilih lokasi di mana item selesai akan disimpan" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Jumlah Produksi" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Jumlah item stok yang akan dibuat" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Item selesai" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Jumlah stok item yang telah diselesaikan" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Status pembuatan" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Tanggal Pembuatan" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Target tanggal selesai" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Target tanggal selesai produksi. Produksi akan menjadi terlambat setelah tanggal ini." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Tanggal selesai" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "diselesaikan oleh" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Diserahkan oleh" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Penanggung Jawab" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Tautan menuju URL eksternal" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Tidak diizinkan" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Pengguna" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Harga" @@ -1679,560 +1715,560 @@ msgstr "Harga" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Judul" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Tautan" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Kesimpulan" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Berkas Gambar" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Lampiran" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "File tidak ditemukan" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Tautan eksternal tidak ditemukan" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Pilih file untuk dilampirkan" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Komentar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Ukuran Berkas" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Terbuat" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Pilihan" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Aktif" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Respon" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponen" @@ -2932,7 +2968,7 @@ msgstr "Komponen" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "Total Harga" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "Order ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Salin Baris" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Tanggal" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Harga Minimal" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Harga Maksimal" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Perbarui" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index eb0253e2b0..2ead745e20 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -89,7 +89,7 @@ msgstr "Impossibile convertire {original} in {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" @@ -97,16 +97,16 @@ msgstr "Quantità inserita non valida" msgid "Error details can be found in the admin panel" msgstr "I dettagli dell'errore possono essere trovati nel pannello di amministrazione" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Inserisci la data" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Valore decimale non valido" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Numero di riferimento troppo grande" msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Descrizione" msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Percorso" @@ -334,7 +334,7 @@ msgstr "Errore del server" msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Immagine" msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" @@ -373,6 +373,46 @@ msgstr "Tipo di Contenuto non trovato" msgid "Content type does not match required mixin class" msgstr "Il tipo di contenuto non corrisponde alla classe mixin richiesta" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Copia parametri" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Copia Linee" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Copia gli elementi di riga dall'ordine originale" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Copia Linee Extra" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Copia gli elementi di riga extra dall'ordine originale" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabo" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Stato dell'ordine" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Produzione Genitore" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Includi Varianti" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Includi Varianti" msgid "Part" msgstr "Articolo" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Categoria" @@ -661,125 +701,126 @@ msgstr "Escludi Albero" msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opzionale" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Assemblaggio" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Monitorato" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testabile" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Ordine In Corso" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Allocato" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Utilizzato" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Ordinato" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordine di Produzione" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Posizione" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Output" -#: build/api.py:1107 +#: build/api.py:1120 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:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Ordini di Produzione" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Assembly BOM non è stato convalidato" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "L'ordine di generazione non può essere creato per una parte inattiva" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "L'ordine di compilazione non può essere creato per una parte sbloccata" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Gli ordini di costruzione possono essere eseguiti solo esternamente per gli articoli acquistabili" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "L'utente o il gruppo responsabile deve essere specificato" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "L'ordine di costruzione della parte non può essere cambiata" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "La data di scadenza deve essere successiva alla data d'inizio" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Riferimento Ordine Di Produzione" msgid "Reference" msgstr "Riferimento" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Breve descrizione della build (facoltativo)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Ordine di produzione a cui questa produzione viene assegnata" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Selezionare parte da produrre" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:297 +#: build/models.py:294 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:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleziona la posizione da cui prelevare la giacenza (lasciare vuoto per prelevare da qualsiasi posizione di magazzino)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Build Esterno" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Questo ordine di produzione è eseguito esternamente" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Quantità Produzione" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Numero di articoli da costruire" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Numero di articoli di magazzino che sono stati completati" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Stato Produzione" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Data inizio produzione" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Data d'inizio programmata per questo ordine di produzione" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data di completamento della produzione. Dopo tale data la produzione sarà in ritardo." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "Completato da" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link a URL esterno" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Codice del progetto" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "Impossibile finalizzare l'ordine di produzione con ordini secondari aperti" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossibile finalizzare l'ordine di produzione con articolo incompleti" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "La produzione non ha superati tutti i test richiesti" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "Impossibile completare parzialmente un build output con gli elementi assegnati" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Elemento di Riga Ordine di Produzione" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Crea oggetto" msgid "Quantity" msgstr "Quantità" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Quantità di articoli magazzino consumate" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "La quantità assegnata deve essere maggiore di zero" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Installa in" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Livello Produzione" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Nome Articolo" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Posizione dello stock per l'output della produzione" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Posizione dello stock per l'output di produzione rimosso" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Scarta Assegnazioni" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Scartare tutte le assegnazioni di magazzino per gli output rimossi" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Motivo dell'eliminazione degli output di compilazione" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Consuma Giacenze Allocate" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "L'ordine di costruzione ha ancora degli ordini di costruzione figli" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "L'ordine di costruzione deve essere in stato di produzione" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Riferimento BOM" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "Identificativo dell'Articolo BOM" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Nome Articolo BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Costruzione" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Articolo Fornitore" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Quantità assegnata" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Riferimento Ordine Di Costruzione" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Nome Categoria Articolo" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Tracciabile" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "In Produzione" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Pianificato per la produzione" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Scorte esterne" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Disponibili scorte alternative" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Disponibili varianti delle scorte" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantità consumata supera la quantità assegnata" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Note facoltative per il consumo di magazzino" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "L'articolo prodotto deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Duplica l'allocazione degli articoli da produrre" -#: build/serializers.py:1785 +#: build/serializers.py:1798 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:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Duplica l'allocazione della riga di produzione" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Deve essere fornita almeno un articolo o riga" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Etichetta Codice Progetto" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Aggiornato" @@ -1608,9 +1644,9 @@ msgstr "Codice unico del progetto" msgid "Project description" msgstr "Descrizione del progetto" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Il valore non supera i controlli di convalida" msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Utente" msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Prezzo" @@ -1679,560 +1715,560 @@ msgstr "Prezzo" msgid "Unit price at specified quantity" msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Scadenza" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "È questa notifica attiva" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token per l'accesso" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Segreto" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Host" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Host da cui questo messaggio è stato ricevuto" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Intestazione" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Intestazione di questo messaggio" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Contenuto" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Contenuto di questo messaggio" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Lavorato il" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Titolo" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Collegamento" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Pubblicato" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autore" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Riepilogo" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Letto" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Queste notizie sull'elemento sono state lette?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "File immagine" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Tipo di modello di destinazione per questa immagine" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "ID modello di destinazione per questa immagine" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Unità Personalizzata" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Il simbolo dell'unità deve essere univoco" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Il nome dell'unità deve essere un identificatore valido" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Nome dell'unità" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Simbolo" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Simbolo unità opzionale" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definizione" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definizione unità" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Allegato" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "File mancante" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Link esterno mancante" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Tipo modello" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Tipo di modello di destinazione per l'immagine" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Seleziona file da allegare" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Commento" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Commento allegato" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Data caricamento" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Data di caricamento del file" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Dimensione file" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Dimensioni file in byte" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Tipo di modello specificato per l'allegato non valido" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Stato Personalizzato" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Stati Personalizzati" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Imposta Stato Di Riferimento" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Set di stato esteso con questo stato personalizzato" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chiave Logica" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Chiave logica dello stato che è uguale a questo stato personalizzato nella logica commerciale" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Valore" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Valore numerico che verrà salvato nel database dei modelli" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Nome dello Stato" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etichetta" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Etichetta che verrà visualizzata nel frontend" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Colore" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Colore che verrà visualizzato nel frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Modello" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Modello a cui questo stato è associato" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Il modello deve essere selezionato" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "La chiave deve essere selezionata" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "La chiave logica deve essere selezionata" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "La chiave deve essere diversa dalla chiave logica" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Deve essere fornita una classe di stato di riferimento valida" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "La chiave deve essere diversa dalle chiavi logiche dello stato di riferimento" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "La chiave logica deve essere nelle chiavi logiche dello stato di riferimento" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Il nome deve essere diverso dai nomi dello stato di riferimento" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Elenco Selezioni" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Elenchi di Selezione" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Nome dell'elenco di selezione" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Descrizione della lista di selezione" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Bloccato" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Questa lista di selezione è bloccata?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Questo elenco di selezione può essere utilizzato?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Plugin Sorgente" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Plugin che fornisce l'elenco di selezione" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Stringa Sorgente" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Stringa opzionale che identifica il sorgente usato per questa lista" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Voce Predefinita" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Voce predefinita per questo elenco di selezione" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Creato" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Data e ora in cui è stato creato l'elenco di selezione" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Ultimo aggiornamento" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Data e ora in cui l'elenco di selezione è stato aggiornato" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Voce Lista Selezione" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Voci Lista Selezione" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Elenco di selezione a cui appartiene questa voce" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Valore della voce della lista di selezione" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Etichetta per la voce elenco di selezione" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Descrizione della voce della lista di selezione" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Questa voce della lista di selezione è attiva?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Modello Parametro" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Modelli parametro" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "I parametri della casella di controllo non possono avere unità" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "I parametri della casella di controllo non possono avere scelte" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Le scelte devono essere uniche" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Tipo di modello di destinazione per questo modello di parametro" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Nome Parametro" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Unità" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Unità fisiche per questo parametro" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Descrizione del parametro" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Casella di spunta" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Questo parametro è una casella di spunta?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Scelte" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Scelte valide per questo parametro (separato da virgola)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Lista di selezione per questo parametro" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Abilitato" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Questo modello di parametro è abilitato?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Parametro" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Parametri" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Tipo di modello specificato per parametro non valido" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "ID Modello" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "ID del modello di destinazione per questo parametro" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Modello" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Modello Parametro" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Dati" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Valore del Parametro" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Valore del Parametro" msgid "Note" msgstr "Nota" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Note opzionali elemento" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Scansione Codice A Barre" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Dati del Codice a Barre" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Utente che ha scannerizzato il codice a barre" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Data e ora" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Data e ora della scansione del codice a barre" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Endpoint URL che ha elaborato il codice a barre" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Contesto" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Dati contestuali per la scansione del codice a barre" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Risposta" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Dati di risposta dalla scansione del codice a barre" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Risultato" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "La scansione del codice a barre è riuscita?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Si è verificato un errore" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: La cancellazione del log email è protetta. Imposta INVENTREE_PROTECT_EMAIL_LOG a Falso per consentire la cancellazione." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "Messaggio email" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "Messaggi email" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Annunciato" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Inviato" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Fallito" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Consegnato" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Confermato" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Ricevuti" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "In uscita" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Nessuna risposta" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Traccia La Consegna" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Conferma di lettura" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Tracciare i clic delle email" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "ID Globale" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatore per questo messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "ID discussione" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatore per questo thread del messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Discussione" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Thread collegato a questo messaggio" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Priorità" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "Discussione Email" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "Discussioni Email" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Chiave" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chiave univoca per questa discussione (usata per identificare la discussione)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Identificatore univoco per questa discussione" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Avviato internamente" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Questa discussione è iniziata internamente?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Data e ora in cui la discussione è stata creata" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Data e ora in cui la discussione è stata aggiornata" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Componente" @@ -2932,7 +2968,7 @@ msgstr "Componente" msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Acquistabile" @@ -2940,7 +2976,7 @@ msgstr "Acquistabile" msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Vendibile" @@ -2952,7 +2988,7 @@ msgstr "Gli articoli sono acquistabili per impostazione predefinita" msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuale" @@ -4215,8 +4251,8 @@ msgstr "L'articolo interno è attivo" msgid "Supplier is Active" msgstr "Il fornitore è attivo" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Produttore" @@ -4406,7 +4442,7 @@ msgstr "Note di spedizione per uso interno" msgid "Link to address information (external)" msgstr "Collegamento alle informazioni sull'indirizzo (esterno)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Codice articolo produttore" @@ -4424,8 +4460,8 @@ msgstr "Seleziona articolo" msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "Codice articolo produttore (MPN)" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Fornitore" msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" @@ -4493,15 +4529,15 @@ msgstr "URL dell'articolo del fornitore" msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "costo base" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Confezionamento" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "multiplo" @@ -4542,31 +4578,31 @@ msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" msgid "Supplier Price Break" msgstr "Sconto Prezzo Fornitore" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Valuta predefinita utilizzata per questo fornitore" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Nome Azienda" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "In magazzino" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Sconti a scalare" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Errore durante l'esportazione dei dati" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Il plugin di esportazione dati ha restituito un formato di dati errato" @@ -4735,11 +4771,11 @@ msgstr "Indice riga" msgid "Original row data" msgstr "Dati riga originali" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Errori" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Valido" @@ -4899,55 +4935,55 @@ msgstr "Posizione Della Stampante" msgid "Scope the printer to a specific location" msgstr "Ambito della stampante a una posizione specifica" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Nome della macchina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Tipo di macchina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Tipo di macchina" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Driver" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Driver utilizzato per la macchina" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Le macchine possono essere disabilitate" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Driver disponibile" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Nessun errore" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Inizializzato" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Stato della Macchina" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Macchina" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Configurazione Macchina" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Tipo di configurazione" @@ -5066,7 +5102,7 @@ msgstr "Ordine" msgid "Order Complete" msgstr "Ordine completato" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Articolo interno" @@ -5124,11 +5160,11 @@ msgstr "Prezzo Totale" msgid "Total price for this order" msgstr "Prezzo totale dell'ordine" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Valuta ordine" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta per questo ordine (lasciare vuoto per usare il valore predefinito dell'azienda)" @@ -5168,7 +5204,7 @@ msgstr "Data iniziale" msgid "Scheduled start date for this order" msgstr "Data d'inizio programmata per questo ordine" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data scadenza" @@ -5477,8 +5513,8 @@ msgstr "Verificato Da" msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Spedizione" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID Ordine" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID dell'ordine da duplicare" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Copia Linee" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Copia gli elementi di riga dall'ordine originale" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Copia Linee Extra" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Copia gli elementi di riga extra dall'ordine originale" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Copia parametri" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Elementi Riga" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Righe Completate" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Duplica Ordine" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Specifica le opzioni per duplicare questo ordine" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "ID dell'ordine non corretto" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Nome Fornitore" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Prezzo Automatico" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Unisci elementi" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Numero Articolo Interno" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Data di Scadenza" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Inserisci la data di scadenza per gli articoli in arrivo" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Sovrascrivi le informazioni d'imballaggio per gli articoli in arrivo" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Nota aggiuntiva per gli articoli in arrivo" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Spedizioni" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Elementi Assegnati" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "I seguenti numeri di serie non sono disponibili" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Articoli Linea Ordine Reso" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "L'elemento di riga non corrisponde all'ordine di reso" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "L'elemento di riga è già stato ricevuto" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Quantità da restituire" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Valuta del prezzo" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "Ha revisioni" msgid "BOM Valid" msgstr "BOM Valido" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Categorie a Cascata" -#: part/api.py:996 +#: part/api.py:998 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:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtra per categoria ID numerica o per la stringa 'null'" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "L'articolo assemblato è provabile" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Il componente è provabile" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Utilizzi" @@ -6210,7 +6202,7 @@ msgstr "Categoria Articoli" msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Posizione Predefinita" @@ -6259,656 +6251,660 @@ msgstr "Valore Predefinito" msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Articoli" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Impossibile eliminare i parametri di una parte bloccata" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Impossibile modificare i parametri di una parte bloccata" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Impossibile eliminare questo articolo perché è bloccato" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Impossibile eliminare questo articolo perché è ancora attivo" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Non è possibile eliminare questo articolo in quanto è utilizzato in una costruzione" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "L'articolo '{self}' non può essere usata nel BOM per '{parent}' (ricorsivo)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "L'articolo '{parent}' è usato nel BOM per '{self}' (ricorsivo)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN deve corrispondere al modello regex {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "L'articolo non può essere una revisione di se stesso" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Le revisioni sono consentite solo per le parti di assemblaggio" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Non è possibile effettuare la revisione di un articolo modello" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "L'articolo genitore deve puntare allo stesso modello" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La revisione dell'articolo duplicata esiste già." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "È Template" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante Di" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descrizione della parte (opzionale)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Parole Chiave" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revisione" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Questo articolo è una revisione di un altro articolo?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revisione di" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Scadenza (in giorni) per gli articoli in giacenza di questo pezzo" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Scorta Minima" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Questo articolo può avere delle prove registrate?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Gli articoli bloccati non possono essere modificati" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "È una parte virtuale, come un prodotto software o una licenza?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "BOM Convalidata" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Il BOM per questa parte è valido?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Utente responsabile di questo articolo" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Sovrascrivi il costo minimo" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Sovrascrivi il costo massimo" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Data" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Aggiungi Prezzo Ribassato di Vendita dell'Articolo" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Modello Prove Articolo" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 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:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Chiave Di Prova" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Chiave semplificata per la prova" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Questo test è attivo?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Richiesto" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Scelte valide per questo test (separate da virgole)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 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:4084 +#: part/models.py:4088 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:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Imposta quantità" -#: part/models.py:4145 +#: part/models.py:4149 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:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Logoramento" -#: part/models.py:4155 +#: part/models.py:4159 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:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Arrotondamento Multiplo" -#: part/models.py:4168 +#: part/models.py:4172 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:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Questo articolo della distinta base è stato validato" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Viene Ereditato" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Nota per questa relazione" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" @@ -6956,331 +6952,319 @@ msgstr "Valuta di acquisto di questo articolo in stock" msgid "File is not an image" msgstr "Il file non è un immagine" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Articolo Originale" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Seleziona l'articolo originale da duplicare" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Copia immagine" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Copia immagine dall'articolo originale" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Copia Distinta Base" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Copia fattura dei materiali dall'articolo originale" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Copia i dati dei parametri dall'articolo originale" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Copia note" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Copia note dall'articolo originale" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Copia Test" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Copia modelli di test dall'articolo originale" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Nome Categoria" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "In Costruzione" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Quantità di questo articolo attualmente in produzione" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Eccezionale quantità di questa parte prevista da costruire" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Articoli in magazzino" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Revisioni" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Giacenze Totali" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Scorte Non Assegnate" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Scorta Variante" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Copia immagine" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Copia immagine dall'articolo originale" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Copia Distinta Base" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Copia fattura dei materiali dall'articolo originale" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Copia note" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Copia note dall'articolo originale" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Copia Test" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Copia modelli di test dall'articolo originale" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Immagine esistente" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Nome del file di un'immagine articolo esistente" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Il file immagine non esiste" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Puoi produrre" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Richiesto per gli Ordini di Produzione" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Assegnato agli Ordini di Produzione" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Richiesto per gli Ordini di Vendita" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Sovrascrivi valore calcolato per il prezzo minimo" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Valuta del prezzo minimo" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Sovrascrivi valore calcolato per il prezzo massimo" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Valuta del prezzo massimo" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Il prezzo minimo non può essere maggiore del prezzo massimo" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Il prezzo massimo non può essere minore del prezzo minimo" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Seleziona l'assemblaggio padre" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Seleziona la componente" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Fornisce supporto nativo per codici a barre" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Prefisso Codice A Barre Corto" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Personalizzare il prefisso utilizzato per codici a barre corti, può essere utile per ambienti con più istanze InvenTree" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Creazione automatica di produzioni" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Crea automaticamente ordini di produzione per gli assemblaggi" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La quantità non deve superare la quantità disponibile ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Note sugli spostamenti di magazzino" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 3e806f7369..deb566af7d 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -89,7 +89,7 @@ msgstr "{original}を{unit}に変換できませんでした。" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "数量コードが無効です" @@ -97,16 +97,16 @@ msgstr "数量コードが無効です" msgid "Error details can be found in the admin panel" msgstr "エラーの詳細は管理者パネルで確認できます" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "日付を入力する" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "無効な10進数値" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "参照番号が大きすぎる" msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "説明" msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "パス" @@ -334,7 +334,7 @@ msgstr "サーバーエラー" msgid "An error has been logged by the server." msgstr "サーバーによってエラーが記録されました。" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "画像" msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "通貨" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" @@ -373,6 +373,46 @@ msgstr "コンテンツタイプが見つかりません" msgid "Content type does not match required mixin class" msgstr "コンテンツタイプが必須のミックスインクラスと一致しません" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "コピーパラメータ" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "コピーライン" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "元の注文から行項目をコピー" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "余分な行をコピー" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "元の注文から余分な項目をコピー" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "アラビア語" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "有効な通貨コードではありません。" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "注文ステータス" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "親ビルド" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "バリアントを含む" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "カテゴリ" @@ -661,125 +701,126 @@ msgstr "ツリーを除く" msgid "Build must be cancelled before it can be deleted" msgstr "削除するには、ビルドをキャンセルする必要があります。" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "消耗品" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "オプション" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "アセンブリ" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "追跡" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "テスト可能" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "受注残高" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "割り当てられた" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "消費されました" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "注文中" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "ビルドが見つかりません" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "組立注文" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "場所" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "出力" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "出力ストックアイテムIDでフィルタリングします。未インストールビルドアイテムを検索するには「null」をご使用ください。" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "組立注文" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "アセンブリBOMが検証されていません" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "非アクティブな部品にビルドオーダーを作成できません。" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "ロックされていない部品にビルドオーダーを作成できません。" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "ビルドオーダーを外部委託できるのは、購入可能部品のみです" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "担当ユーザーまたはグループを指定する必要があります。" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "ビルドオーダー部品は変更できません" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "目標期日は開始日以降であること" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "ビルド・オーダー・リファレンス" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "ビルド・オーダー・リファレンス" msgid "Reference" msgstr "参照" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "建築の簡単な説明(任意)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "このビルドが引き当てられているビルドオーダー" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "製造する部品の選択" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "セールス・オーダー・リファレンス" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "このビルドが引き当てられている受注" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "ソース・ロケーション" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "このビルドで在庫を取得する場所を選択します(任意の在庫場所から取得する場合は空白のままにしてください)。" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "外部ビルド" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "このビルドオーダーは外部委託されます。" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "目的地" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "完成したアイテムの保管場所を選択" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "数量" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "構築するストックアイテムの数" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "完成品" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "完了した在庫アイテムの数" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "組立状況" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "ビルドステータスコード" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "バッチコード" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "このビルド出力のバッチコード" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "作成日時" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "ビルド開始日" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "この注文の開始予定日" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "完成目標日" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "ビルド完了目標日。この日付を過ぎると、ビルドは期限切れになります。" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "完了日" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "完了者" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "発行者" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "このビルドオーダーを発行したユーザー" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "責任" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "このビルドオーダーを担当するユーザーまたはグループ" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "外部リンク" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "外部 サイト へのリンク" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "組立優先度" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "建設順序の優先順位" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "プロジェクトコード" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "プロジェクトコード" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "製造中の子ビルドがあるため、ビルドオーダーを完了できません" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "不完全な出力があるため、ビルドオーダーを完了できません" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "追跡可能な部品については、シリアル番号の提示が必要です。" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "ビルド出力が指定されていません" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "ビルド出力はすでに完了しています" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "ビルド出力がビルド順序と一致しません" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "数量はゼロより大きくなければなりません" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "数量が出力数量を上回ることはできません" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "ビルド出力は、必要なすべてのテストを通過していません" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "引き当て済みの在庫品は、現在生産中です" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "割り当てられた項目を含むビルド出力の一部のみを完了することはできません" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "ビルドオーダーラインアイテム" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "ビルドオブジェクト" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "ビルドオブジェクト" msgid "Quantity" msgstr "数量" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "注文数量" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "消費された在庫の数量" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "ビルド項目は、ビルド出力を指定する必要があります。" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "選択された在庫品目が部品表に一致しません。" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "引き当て数はゼロより大きくなければなりません" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "シリアル在庫の場合、数量は1でなければなりません。" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "在庫が過剰配分" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "ソース在庫品" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "建設に割り当てる在庫量" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "インストール" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "仕向け地在庫品" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "ビルドレベル" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "部品名" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "ビルド出力" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "ビルド出力が親ビルドと一致しません" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "出力部分が BuildOrder 部分と一致しません。" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "このビルド出力はすでに完了しています" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "このビルド出力は完全に割り当てられていません" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "ビルド出力の数量を入力" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "追跡可能な部品に必要な整数個数" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "ビルド出力のためのシリアル番号の入力" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "ビルド出力のストック位置" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "シリアル番号の自動割り当て" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "以下のシリアル番号は既に存在するか、無効です。" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "ビルド出力のリストを提供する必要があります。" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "スクラップされたアウトプットの在庫場所" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "廃棄割り当て" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "廃棄されたアウトプットに割り当てられた在庫の破棄" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "ビルドアウトプットを廃棄する理由" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "完成した建造物のアウトプットの場所" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "不完全割当の受入れ" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "在庫が完全に割り当てられていない場合は、出力を完了します。" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "割当在庫の消費" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "このビルドに割り当て済みのストックを消費します。" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "不完全な出力の削除" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "完了していないビルド出力を削除します。" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "不可" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "このビルド・オーダーで消費されるものとして受け入れます。" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "このビルドオーダーを完了する前に割り当てを解除します。" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "総合在庫" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "製造オーダーに割り当てられた余分な在庫品をどのように処理しますか?" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "一部の在庫品目は全体的に配分されています。" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "未割り当ての受け入れ" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当てられていないことを受け入れます。" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "必要在庫の配分が完了していません" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "インコンプリートの受け入れ" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "必要な数のビルドアウトプットが完了していないことを受け入れます。" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "必要な構築数量が完了していません" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "ビルド・オーダーには未完成の子ビルド・オーダーがあります。" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "受注生産状態であること" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "ビルド・オーダーの出力が不完全" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "ビルド出力" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "ビルド出力は同じビルド" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "ビルドラインアイテム" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.partは、ビルドオーダーと同じパーツを指す必要があります。" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "在庫があること" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "使用可能数量({q})を超過" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "追跡部品の割り当てには、ビルド出力を指定する必要があります。" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "割り当て項目の提供" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部品を調達する在庫場所(任意の場所から調達する場合は空白にしてください。)" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "場所を除く" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "この選択された場所から在庫商品を除外" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "交換可能ストック" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "複数の拠点にある在庫品を交換可能" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "代替ストック" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "代替部品の割り当て" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "オプション" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "オプションのBOMアイテムをビルドオーダーに割り当てます。" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "すべてのアイテム" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "非追跡対象部品" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "追跡対象部品" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "項目タイプ" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "自動引き当てを行なう部品種類を選択してください" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "在庫優先度" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "一致する在庫アイテムが消費される優先順位" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "組立明細" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "これらの組立明細に割当を制限します (すべての行を割り当てるには空白のままにしてください)" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "BOMリファレンス" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "BOMパーツID" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "部品表 部品名" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "インストール先" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "ビルド" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "サプライヤー" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "割当数量" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "ビルドリファレンス" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "部品分類名" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "追跡可能" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "継承" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "BOMアイテム" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "生産中" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "ビルド予定" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "在庫状況" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "利用可能な代替ストック" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "在庫状況" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "消費量が割り当て量を超過しています" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "在庫消費に関する任意の注記" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "ビルド項目は正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "重複したビルド項目の割り当て" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "ビルドラインは正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "重複したビルドラインの割り当て" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "少なくとも1つの項目または行を指示する必要があります" @@ -1584,7 +1620,7 @@ msgstr "タグ" msgid "Project Code Label" msgstr "プロジェクトコードラベル" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "更新しました" @@ -1608,9 +1644,9 @@ msgstr "独自のプロジェクトコード" msgid "Project description" msgstr "プロジェクトの説明" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "値がバリデーション・チェックに合格しない" msgid "Key string must be unique" msgstr "キー文字列は一意でなければなりません。" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "ユーザー" msgid "Price break quantity" msgstr "価格破壊数量" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "価格" @@ -1679,560 +1715,560 @@ msgstr "価格" msgid "Unit price at specified quantity" msgstr "指定数量での単価" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "エンドポイント" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "このウェブフックを受信するエンドポイント" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "このウェブフックの名前" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "このウェブフックはアクティブですか" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "トークン" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "アクセス用トークン" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "シークレット" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "HMACの共有秘密" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "このメッセージの一意な識別子" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "ホスト" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "このメッセージを受信したホスト" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "ヘッダー" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "このメッセージのヘッダー" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "本文" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "メッセージ本文" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "このメッセージを受信したエンドポイント" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "作業内容" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "このメッセージに関する作業は終わったのですか?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "タイトル" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "リンク" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "公開済み" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "投稿者" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "概要" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "既読" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "このニュースは読まれましたか?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "画像ファイル" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "この画像の対象モデルタイプ" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "この画像の対象モデルID" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "カスタムユニット" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "単位記号は一意でなければなりません。" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "ユニット名は有効な識別子でなければなりません。" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "ユニット名" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "シンボル" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "オプションの単位記号" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "定義" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "ユニットの定義" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "添付ファイル" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "ファイルがありません" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "名前を変更するファイルがありません" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "ファイル名は空にできません" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "不正なファイル名" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "ファイルの拡張子を変更できません" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "この名前のファイルはすでに存在します" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "ファイル名の変更後の保存に失敗しました" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "モデルタイプ" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "画像の対象モデルタイプ" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "添付ファイルを選択" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "サムネイル" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "この添付ファイルのサムネイル画像" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "コメント:" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "添付コメント" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "アップロード日" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "ファイルがアップロードされた日付" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "画像" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "この添付ファイルが有効な画像ファイルである場合、真となります" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "ファイルサイズ" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "ファイルサイズ(バイト" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "添付ファイルに指定されたモデルタイプが無効です" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "カスタムステート" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "カスタムステート" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "リファレンス・ステータス・セット" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "このカスタム状態で拡張されたステータスセット" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "論理キー" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "ビジネスロジックでこのカスタムステートに等しいステート論理キー" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "値" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "モデルのデータベースに保存される数値" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "都道府県名" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "ラベル" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "フロントエンドに表示されるラベル" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "色" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "フロントエンドに表示される色" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "モデル" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "この状態が関連するモデル" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "モデルを選択する必要があります" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "キーを選択する必要があります。" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "論理キーを選択する必要があります。" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "キーは論理キーと異なる必要があります。" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "有効な参照ステータスクラスが提供されなければならない" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "キーは、参照ステータスの論理キーとは異なる必要があります。" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "論理キーは、参照ステータスの論理キーに含まれていなければなりません。" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "リファレンス・ステータスの名前とは異なっていなければならない。" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "セレクションリスト" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "セレクション・リスト" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "選択リストの名前" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "選択リストの説明" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "ロック中" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "この選択リストはロックされていますか?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "このセレクションリストは使えますか?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "ソースプラグイン" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "選択リストを提供するプラグイン" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "ソースストリング" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "このリストに使用されているソースを示すオプションの文字列" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "デフォルトエントリー" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "この選択リストのデフォルト項目" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "作成日" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "選択リストが作成された日時" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "最終更新" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "選択リストが最後に更新された日時" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "セレクションリスト入力" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "セレクションリスト" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "このエントリーが属する選択リスト" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "選択リストエントリーの値" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "選択リスト項目のラベル" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "選択リスト項目の説明" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "この選択リストはアクティブですか?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "パラメータテンプレート" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "パラメータテンプレート" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "チェックボックスのパラメータに単位を指定することはできません。" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "チェックボックスパラメータに選択肢を持たせることはできません。" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "選択肢はユニークでなければなりません" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "パラメータ・テンプレート名は一意でなければなりません。" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "このパラメータテンプレートにおける対象モデルタイプ" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "パラメータ名" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "単位" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "このパラメータの物理単位" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "パラメータの説明" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "チェックボックス" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "このパラメータはチェックボックスですか?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "選択肢" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "このパラメータの有効な選択肢(カンマ区切り)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "このパラメータの選択リスト" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "有効" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "このパラメータテンプレートは有効ですか?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "パラメータ" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "パラメータ" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "パラメータに対して無効なモデルタイプが指定されています" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "モデルID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "このパラメータの対象となるモデルのID" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "テンプレート" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "パラメータテンプレート" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "データ" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "パラメータ値" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "パラメータ値" msgid "Note" msgstr "備考" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "任意のメモ欄" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "バーコードスキャン" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "バーコードデータ" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "バーコードをスキャンしたユーザー" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "タイムスタンプ" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "バーコードスキャンの日時" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "バーコードを処理したURLエンドポイント" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "コンテキスト" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "バーコードスキャンのコンテキストデータ" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "返答" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "バーコードスキャンによるレスポンスデータ" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "結果" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "バーコードスキャンは成功しましたか?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "エラーが発生しました" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: メールログの削除は保護されています。削除を許可するには、INVENTREE_PROTECT_EMAIL_LOG を False に設定してください。" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "メールメッセージ" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "メールメッセージ" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "発表されました" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "送信" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "失敗" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "配送済み" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "確認済み" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "インバウンド" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "アウトバウンド" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "返信なし" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "配送状況を記録" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "読み取りを記録" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "クリックを記録" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "グローバルID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "このメッセージの識別子(外部システムから提供される場合があります)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "スレッドID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "このメッセージスレッドの識別子(外部システムから提供される場合があります)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "スレッド" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "このメッセージに関連するスレッド" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "優先順位" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "メールのスレッド" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "メールのスレッド" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "キー" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "このスレッドの固有キー(スレッドを識別するために使用されます)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "このスレッドの固有識別子" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "内部を開始しました" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "このスレッドは内部で開始されたものですか?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "スレッドが作成された日時" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "スレッドが最後に更新された日時" @@ -2923,8 +2959,8 @@ msgstr "パーツはデフォルトのテンプレートです" msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "コンポーネント" @@ -2932,7 +2968,7 @@ msgstr "コンポーネント" msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "購入可能" @@ -2940,7 +2976,7 @@ msgstr "購入可能" msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "販売可能" @@ -2952,7 +2988,7 @@ msgstr "パーツはデフォルトで販売可能です" msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "バーチャル" @@ -4215,8 +4251,8 @@ msgstr "内部はアクティブ" msgid "Supplier is Active" msgstr "サプライヤーの活動" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "製造元" @@ -4406,7 +4442,7 @@ msgstr "社内用出荷注意事項" msgid "Link to address information (external)" msgstr "住所情報へのリンク(外部)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "メーカー・パーツ" @@ -4424,8 +4460,8 @@ msgstr "部品を選択" msgid "Select manufacturer" msgstr "メーカー選択" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,8 @@ msgstr "パック単位はゼロより大きくなければなりません。" msgid "Linked manufacturer part must reference the same base part" msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "仕入先" msgid "Select supplier" msgstr "サプライヤーを選択" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "サプライヤー在庫管理ユニット" @@ -4493,15 +4529,15 @@ msgstr "外部サプライヤー部品リンク用URL" msgid "Supplier part description" msgstr "サプライヤーの部品説明" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "基本料金" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "パッケージング" @@ -4518,7 +4554,7 @@ msgstr "パック数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "1パックに供給される総量。単品の場合は空のままにしてください。" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "複数" @@ -4542,31 +4578,31 @@ msgstr "アベイラビリティ・データの最終更新日" msgid "Supplier Price Break" msgstr "サプライヤーの価格破壊" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "このサプライヤーで使用されるデフォルト通貨" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "会社名" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "在庫あり" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "価格割り引き" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "表示名" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "データのエクスポート中にエラーが発生しました" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "データエクスポートプラグインが不正なデータ形式を返しました" @@ -4735,11 +4771,11 @@ msgstr "行インデックス" msgid "Original row data" msgstr "元の行データ" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "エラー" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "有効" @@ -4899,55 +4935,55 @@ msgstr "プリンタの場所" msgid "Scope the printer to a specific location" msgstr "プリンターを特定の場所に設置" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "機械名" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "機種" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "機械の種類" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "ドライバー" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "マシンに使用されるドライバ" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "マシンを無効にすることができます" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "ドライバーあり" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "エラーなし" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "初期化" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "機械の状態" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "機械" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "マシン構成" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "設定タイプ" @@ -5066,7 +5102,7 @@ msgstr "注文" msgid "Order Complete" msgstr "注文完了" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "内部パーツ" @@ -5124,11 +5160,11 @@ msgstr "合計金額" msgid "Total price for this order" msgstr "この注文の合計金額" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "注文通貨" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "この注文の通貨(会社のデフォルトを使用する場合は空白のままにしてください。)" @@ -5168,7 +5204,7 @@ msgstr "開始日" msgid "Scheduled start date for this order" msgstr "本注文の開始予定日" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "終了日に達したら" @@ -5477,8 +5513,8 @@ msgstr "チェック済み" msgid "User who checked this shipment" msgstr "この貨物をチェックしたユーザー" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "発送" @@ -5544,8 +5580,8 @@ msgstr "割当数量が在庫数量を超えることはできません" msgid "Allocation quantity must be greater than zero" msgstr "割当数量はゼロより大きくなければなりません" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。" @@ -5685,39 +5721,7 @@ msgstr "移動数" msgid "Transfer Order Allocation" msgstr "在庫移動指示の引き当て" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "注文ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "複製する注文のID" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "コピーライン" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "元の注文から行項目をコピー" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "余分な行をコピー" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "元の注文から余分な項目をコピー" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "コピーパラメータ" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "元の指示ら指示項目をコピーします" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "元の指示ら指示項目をコピーします" msgid "Line Items" msgstr "ラインアイテム" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "完成路線" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "カスタムステータスキー" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "この論理値の注文ステータスをカスタム値に更新" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "重複した注文" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "この注文を複製するためのオプションを指定します。" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "カスタムステータスキーは整数でなければなりません" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "無効なカスタムステータスキーです" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "この注文ステータスには無効なカスタムステータスキーです" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "無効なオーダーID" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "サプライヤー名" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "ご注文のキャンセルはできません。" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "未完了の行項目で注文を閉じることができます。" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "注文に不備がある場合" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "ご注文は受け付けておりません。" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "自動車価格" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "サプライヤーの部品データに基づいて購入価格を自動計算" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "購入価格通貨" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "アイテムのマージ" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "内部部品番号" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "内部部品名" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "サプライヤー部品の指定が必要" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "注文書の指定が必要" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "サプライヤーは発注書と一致しなければなりません。" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "発注書はサプライヤーと一致している必要があります。" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "明細" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "受取商品の配送先選択" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "入荷在庫品のバッチコード入力" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "有効期限" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "入荷在庫の有効期限の入力" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "入荷した在庫品のシリアル番号の入力" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "入荷在庫品の包装情報の上書き" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "在庫品の入荷に関する注意事項" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "バーコード" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "スキャンされたバーコード" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "バーコードはすでに使用されています" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "項目は必ずご記入ください。" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "デスティネーション・ロケーションを指定する必要があります。" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "バーコードの値は一意でなければなりません。" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "発送" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "完了した出荷" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "引き当て済み明細" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "販売価格通貨" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "割当項目" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "出荷の詳細は記載されていません" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "ラインアイテムは、この注文に関連付けられていません。" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "数量は正数でなければなりません。" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "この在庫品は、必要なすべてのテストに合格していません" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "出荷済み" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "この注文には出荷が関連付けられていません" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "以下のシリアル番号に該当するものは見つかりませんでした。" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "以下のシリアル番号はご利用いただけません。" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "部品の供給元となる在庫場所(任意の場所を使用するには空白のままにしてください)" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "この場所から在庫アイテムを除外" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "この配送に割り当てます" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "1明細を満たすために複数の場所から在庫を使用することを許可する" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "シリアル在庫" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "シリアル在庫品を自動割当に含めるかどうかを制御します" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "これらの明細行に割り当てを制限します(すべての行を割り当てるには空白のままにしてください)" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "明細行はこの注文に属していません" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "返品注文項目" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "ラインアイテムが返品オーダーと一致しません" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "ラインアイテムはすでに受領済み" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "返品数量" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "ライン価格通貨" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "引き当てが未完了でも指示を許可" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "指示に未完了の引き当てがあります" @@ -6145,59 +6137,59 @@ msgstr "改定あり" msgid "BOM Valid" msgstr "BOM有効" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "カスケードカテゴリ" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "もし該当する場合には、指定されたカテゴリの子カテゴリ内のアイテムを含めてください。" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "数値カテゴリIDまたはリテラル'null'でフィルタリングしてください" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "アセンブリ部品はアクティブです" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "アセンブリ部品は追跡可能です" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "組み立て部分はテスト可能" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "アセンブリ部品はロックされています" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "コンポーネント部品はアクティブです" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "コンポーネント部品は追跡可能です" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "コンポーネント部分はテスト可能" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "コンポーネント部品はアセンブリです" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "コンポーネント部品は仮想的なものです" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "引き当て可能在庫あり" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "用途" @@ -6210,7 +6202,7 @@ msgstr "パーツカテゴリ" msgid "Part Categories" msgstr "パーツカテゴリ" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "デフォルトの場所" @@ -6259,656 +6251,660 @@ msgstr "初期値" msgid "Default Parameter Value" msgstr "パラメータのデフォルト値" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "パーツ" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "ロックされた部品のパラメータは削除できません" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "ロックされた部品のパラメータを変更することはできません" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "この部分はロックされているため削除できません" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "このパートはまだアクティブなので削除できません。" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "この部品はアセンブリで使用されているため、削除できません。" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "パート'{self}'は'{parent}'(再帰的)のBOMでは使用できません。" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "パート'{parent}'は'{self}'のBOMで使用(再帰的)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPNは正規表現パターン{pattern}に一致しなければなりません。" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "パートはそれ自体の改訂にはなりえません" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "「改訂あり」に設定された部品には、版数の入力が必須です" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "修正が許されるのは組立部品のみ" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "テンプレート部品のリビジョンを作成できません" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "親部品は同じテンプレートを指す必要があります。" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "このシリアル番号の在庫品はすでに存在します" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "パート設定でIPNの重複が許可されていません。" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "重複する部品リビジョンが既に存在します。" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "この名前、IPN、リビジョンを持つ部品は既に存在します。" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "部品を構造部品のカテゴリーに割り当てることはできません!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "部品名" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "テンプレート" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "この部品はテンプレート部品ですか?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "この部品は他の部品の変形ですか?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "変種" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "部品の説明(オプション)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "キーワード" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "検索結果での視認性を向上させる部分キーワード" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "部品のリビジョンまたはバージョン番号" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "リビジョン" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "この部品は他の部品の改訂版ですか?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "改訂版" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "この商品は通常どこに保管されていますか?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "デフォルトの有効期限" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "この部品の在庫品の有効期限(日単位" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "最小在庫" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "最低許容在庫量" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "最大在庫数" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "許容最大在庫数" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "この部品の単位" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "この部品は他の部品から作ることができますか?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "この部品を使って他の部品を作ることはできますか?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "このパーツはユニークなアイテムの追跡が可能ですか?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "この部品にテスト結果を記録することはできますか?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "この部品は外部のサプライヤーから購入できますか?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "この部品は顧客に販売できますか?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "この部分はアクティブですか?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "ロックされた部分は編集できません" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "これは、ソフトウェア製品やライセンスなどの仮想部品ですか?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "部品表の検証が完了しました" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "こちらの部品の部品表(BOM)は有効でしょうか?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "BOMチェックサム" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "保存されたBOMのチェックサム" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOMチェック済み" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "BOMチェック日" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "作成ユーザー" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "この部分の責任者" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "複数販売" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "価格計算のキャッシュに使用される通貨" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "最小BOMコスト" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "構成部品の最低コスト" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "最大BOMコスト" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "構成部品の最大コスト" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "最低購入価格" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "過去の最低購入価額" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "最大購入費用" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "過去の最高購入価格" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "最低社内価格" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最低コスト" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "社内最高価格" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最大コスト" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "最低供給価格" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最低価格" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "サプライヤー最高価格" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最高価格" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "最小バリアントコスト" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "バリアントパーツの最小コストの計算" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "最大バリアントコスト" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "バリアント部品の最大コストの計算" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "最低料金" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "最低コストのオーバーライド" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "最大コスト" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "最大コストのオーバーライド" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "総合的な最小コストの計算" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "総合最大コストの計算" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "最低販売価格" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "価格破壊に基づく最低販売価格" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "最高販売価格" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "価格破壊に基づく最高販売価格" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "最低販売価格" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "過去の最低売却価格" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "最大販売価格" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "過去の最高売却価格" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "ストックテイク用部品" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "個数" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "棚卸時の個別在庫数" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "ストックテイク時の在庫可能量" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "日付" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "ストックテイク実施日" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "最低在庫コスト" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "手元在庫の最低見積原価" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "最大在庫コスト" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "手元在庫の最大見積原価" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "パーツセール価格" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "部品試験テンプレート" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "無効なテンプレート名 - 英数字を1文字以上含む必要があります。" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "テストテンプレートは、テスト可能な部分に対してのみ作成できます。" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "同じキーを持つテスト・テンプレートがパートに既に存在します。" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "試験名" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "テストの名前を入力します。" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "テストキー" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "テストの簡易キー" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "試験内容" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "このテストの説明を入力してください。" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "このテストは有効ですか?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "必須" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "このテストは合格するために必要ですか?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "価値が必要" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "このテストは、テスト結果を追加する際に値を必要としますか?" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "アタッチメントが必要" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "この試験では、試験結果を追加する際にファイルの添付が必要ですか。" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "このテストで有効な選択肢(カンマ区切り)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "数量が無効です - 部品に単位が指定されていません" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "数量は0以上でなければなりません" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOMアイテムは変更できません - アセンブリがロックされています。" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM アイテムは変更できません - バリアントアセンブリがロックされています。" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "親部品を選択" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "サブパート" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "BOMで使用する部品を選択" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "金額" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "1つの部品を製造するために消費される副部品の量" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "このBOMアイテムのBOM数量" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "この部品表はオプションです。" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "このBOMアイテムは消耗品です。" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "設定数量" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "ビルドに必要な追加の必要量(セットアップ時の損失を考慮した分)" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "歩留まり損失" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "ビルドにおける推定歩留まり率(0~100%で表されます)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "丸め倍数" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "必要な生産数量を、この値の倍数に切り上げてください。" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "BOMアイテムリファレンス" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "BOMアイテムノート" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "チェックサムi" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "BOMラインのチェックサム" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "検証済み" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "このBOMアイテムは検証済みです" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "継承" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "この BOM アイテムは、バリアントパーツの BOM に継承されます。" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "このBOMアイテムには、バリアントパーツのストックアイテムを使用できます。" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "数量は追跡可能な部品の場合、整数値でなければなりません。" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "サブパーツの指定が必要" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "BOMアイテム代替" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "代用部品はマスター部品と同じにすることはできません。" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "親BOMアイテム" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "代用部品" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "パート #1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "パート #2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "関連部品を選択" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "この関係について" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "部品とそれ自身との間に部品関係を作ることはできません。" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "重複する関係が既に存在します。" @@ -6956,331 +6952,319 @@ msgstr "この在庫商品の購入通貨" msgid "File is not an image" msgstr "ファイルが画像ではありません" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "オリジナルパート" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "複製する元の部品を選択" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "コピー画像" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "元の部分から画像をコピー" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "コピーBOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "元の部品から部品表をコピー" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "元の部品からパラメータデータをコピー" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "コピーノート" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "元のパートからメモをコピー" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "コピーテスト" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "元の部品からテスト用テンプレートをコピーしてください" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "初期在庫量" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "初期在庫場所" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "この部品の初期在庫場所を指定してください。" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "サプライヤーを選択してください。" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "メーカーを選択してください。" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "メーカー品番" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "選択された企業は有効なサプライヤーではありません。" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "選択された会社は有効な製造業者ではありません。" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "このMPNに一致するメーカー部品はすでに存在します。" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "このSKUに一致するサプライヤー部品は既に存在します。" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "カテゴリ名" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "建物" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "現在生産中の当該部品の数量" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "この部品の予定生産数量" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "在庫商品" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "リビジョン" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "総在庫" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "未割当株式" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "バリアントストック" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "重複部分" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "別のパートから初期データをコピー" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "コピー画像" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "元の部分から画像をコピー" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "コピーBOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "元の部品から部品表をコピー" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "コピーノート" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "元のパートからメモをコピー" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "コピーテスト" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "元の部品からテスト用テンプレートをコピーしてください" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "初期在庫" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "初期在庫数で部品を作成" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "サプライヤー情報" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "この部品の初期サプライヤー情報を追加します。" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "コピーカテゴリパラメータ" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "既存イメージ" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "既存の部品画像のファイル名" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "画像ファイルが存在しません" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "部品表全体の検証" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "ビルド" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "ビルドオーダーに必要なもの" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "ビルドオーダーに割り当てられました" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "セールスオーダーに必要なもの" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "セールスオーダーに割り当てられました" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "パートIPN" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "部品の説明" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "部品を選択すると、その部品(およびそのバリエーション部品)の棚卸し情報を作成します" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "カテゴリを選択すると、そのカテゴリ(およびサブカテゴリ)に含まれるすべての部品が表示されます" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "ロケーションを選択すると、そのロケーション(およびサブロケーション)にあるすべての部品が表示されます" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "棚卸しデータを登録" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "選択した部品の棚卸しデータを保存" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "レポートを生成" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "選択した部品の棚卸し明細を作成" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "最小価格" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "最低価格の計算値の上書き" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "最低価格通貨" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "最大価格" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "最高価格の計算値を上書き" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "最高価格通貨" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "更新" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "この部品の価格を更新" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "提供された通貨から{default_currency}に変換できませんでした。" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "最低価格は最高価格を超えてはなりません。" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "最高価格は最低価格を下回ってはなりません。" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "この部品の必要数量(数量単位を含めることができます)" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "親アセンブリを選択" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "構成部品の選択" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "数量の形式が不正です" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "BOMをコピーする部品を選択します。" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "既存データの削除" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "コピー前に既存のBOMアイテムを削除" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "インクルード継承" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "テンプレート化された部品から継承されたBOM項目を含めます。" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "無効な行をスキップ" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "無効な行をスキップするには、このオプションを有効にします。" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "コピー代用部品" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOMアイテムの重複時に代替部品をコピー" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "バーコードのネイティブサポートを提供" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "短いバーコードプレフィックス" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "複数のInvenTreeインスタンスがある環境で便利です。" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "自動ビルド作成" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "アセンブリのビルドオーダーを自動的に作成します" @@ -9453,8 +9437,8 @@ msgstr "在庫品目がしていされていません" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量は在庫数 ({q}) を超えてはなりません。" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "仕向け地" @@ -9626,7 +9610,7 @@ msgstr "在庫品目は既に在庫にあります" msgid "Quantity must not be negative" msgstr "数量は負の数であってはなりません。" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "既存の在庫に統合します" @@ -9642,15 +9626,20 @@ msgstr "株式取引に関する注記" msgid "Set stock location for counted items (optional)" msgstr "計数したアイテムの在庫場所を設定します(オプション)" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "可能なら、返品された商品を既存の在庫商品に統合してください" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "次のシリアル番号" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "以前のシリアル番号" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index 147be093fc..ed92160485 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -89,7 +89,7 @@ msgstr "{original}을(를) {unit}(으)로 변환할 수 없습니다" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "잘못된 수량이 제공되었습니다" @@ -97,16 +97,16 @@ msgstr "잘못된 수량이 제공되었습니다" msgid "Error details can be found in the admin panel" msgstr "오류 상세 내용은 관리자 패널에서 확인할 수 있습니다" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "날짜 입력" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "잘못된 소수 값" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "참조 번호가 너무 큽니다" msgid "Invalid choice" msgstr "잘못된 선택입니다" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "이름" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "설명" msgid "Description (optional)" msgstr "설명 (선택 사항)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "경로" @@ -334,7 +334,7 @@ msgstr "서버 오류" msgid "An error has been logged by the server." msgstr "서버에 오류가 기록되었습니다." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "이미지" msgid "Must be a valid number" msgstr "유효한 숫자여야 합니다" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "통화" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "사용 가능한 옵션에서 통화를 선택하세요" @@ -373,6 +373,46 @@ msgstr "콘텐츠 타입을 찾을 수 없습니다" msgid "Content type does not match required mixin class" msgstr "콘텐츠 타입이 필요한 믹스인 클래스와 일치하지 않습니다" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "매개변수 복사" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "라인 복사" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "원본 주문에서 라인 항목을 복사" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "추가 라인 복사" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "원본 주문에서 추가 라인 항목을 복사" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "아랍어" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "유효한 통화 코드가 아닙니다" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "주문 상태" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "직상위 빌드" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "변형(Variant) 포함" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "변형(Variant) 포함" msgid "Part" msgstr "부품" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "분류" @@ -661,125 +701,126 @@ msgstr "트리 제외" msgid "Build must be cancelled before it can be deleted" msgstr "빌드를 삭제하려면 먼저 취소해야 합니다" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "소모품" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "선택사항" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "조립품" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "추적됨" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "테스트 가능" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "미결 주문" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "할당됨" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "소모됨" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "주문 중" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "빌드를 찾을 수 없습니다" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "작업 지시서" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "위치" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "산출물" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "산출물 재고 항목 ID로 필터링합니다. 설치되지 않은 빌드 항목을 찾으려면 'null'을 사용하세요." -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "작업 지시서" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "조립품 BOM이 검증되지 않았습니다" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "비활성 부품에 대해서는 작업 지시서를 생성할 수 없습니다" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "잠금 해제된 부품에 대해서는 작업 지시서를 생성할 수 없습니다" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "외부 이행은 구매 가능한 부품에 대해서만 가능합니다" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "담당 사용자 또는 그룹을 지정해야 합니다" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "작업 지시서 부품은 변경할 수 없습니다" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "목표일은 시작일 이후여야 합니다" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "작업 지시서 참조번호" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "작업 지시서 참조번호" msgid "Reference" msgstr "참조" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "빌드에 대한 간단한 설명 (선택 사항)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "이 빌드가 할당된 작업 지시서" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "빌드할 부품을 선택하세요" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "판매 주문 참조" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "이 빌드가 할당된 판매 주문" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "원본 위치" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "이 빌드에 사용할 재고를 가져올 위치를 선택하세요 (비워두면 어떤 재고 위치에서든 가져옵니다)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "외주 생산" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "이 작업 지시서는 외주로 생산됩니다" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "대상 위치" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "완료된 항목이 보관될 위치를 선택하세요" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "빌드 수량" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "빌드할 재고 항목 수" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "완료된 항목" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "완료된 재고 항목 수" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "빌드 상태" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "빌드 상태 코드" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "배치 코드" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "이 빌드 산출물의 배치 코드" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "생성일" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "빌드 시작일" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "이 작업 지시서의 예정 시작일" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "목표 완료일" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "빌드 완료 목표일. 이 날짜 이후에는 빌드가 지연으로 처리됩니다." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "완료일" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "완료자" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "발행자" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "이 작업 지시서를 발행한 사용자" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "담당" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "이 작업 지시서를 담당하는 사용자 또는 그룹" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "외부 링크" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "외부 URL로 연결" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "빌드 우선순위" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "이 빌드 주문의 우선순위" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "프로젝트 코드" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "이 빌드 주문의 프로젝트 코드" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "진행 중인 하위 빌드가 있는 상태에서는 작업 지시서를 완료할 수 없습니다" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "미완료 산출물이 있는 상태에서는 작업 지시서를 완료할 수 없습니다" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "추적 가능한 부품에는 시리얼 번호를 제공해야 합니다" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "생산 완제품이 지정되지 않았습니다" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "생산 완제품이 이미 완료되었습니다" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "생산 완제품이 작업 지시서와 일치하지 않습니다" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "수량은 0보다 커야 합니다" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "수량은 산출물 수량보다 클 수 없습니다" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "생산 완제품이 모든 필수 테스트를 통과하지 못했습니다" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "생산 완제품 {serial}이(가) 모든 필수 테스트를 통과하지 못했습니다" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "할당된 재고 항목이 아직 생산 중입니다" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "할당된 항목이 있는 빌드 산출물은 부분 완료할 수 없습니다" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "소요 자재 품목" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "빌드 객체" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "빌드 객체" msgid "Quantity" msgstr "수량" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "작업 지시서에 필요한 수량" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "소모된 재고 수량" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "마스터 부품이 추적 가능으로 표시되어 있으므로, 빌드 항목은 생산 완제품을 지정해야 합니다" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "선택한 재고 항목이 BOM 라인과 일치하지 않습니다" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "할당 수량은 0보다 커야 합니다" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "시리얼이 있는 재고의 수량은 1이어야 합니다" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "할당 수량({q})은 사용 가능한 재고 수량({a})을 초과할 수 없습니다" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "재고 항목이 과다 할당되었습니다" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "재고 항목" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "원본 재고 항목" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "빌드에 할당할 재고 수량" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "설치 대상" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "대상 재고 항목" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "빌드 레벨" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "부품명" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "빌드 산출물" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "빌드 산출물이 상위 빌드와 일치하지 않습니다" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "산출물 부품이 빌드 주문 부품과 일치하지 않습니다" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "이 빌드 산출물은 이미 완료되었습니다" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "이 빌드 산출물은 완전히 할당되지 않았습니다" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "빌드 산출물 수량을 입력하세요" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "추적 가능한 부품에는 정수 수량이 필요합니다" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "BOM에 추적 가능한 부품이 포함되어 있으므로 정수 수량이 필요합니다" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "시리얼 번호 (일련번호)" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "빌드 산출물의 시리얼 번호를 입력하세요" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "빌드 산출물의 재고 위치" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "시리얼 번호 자동 할당" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "일치하는 시리얼 번호로 필요한 항목을 자동으로 할당합니다" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "다음 시리얼 번호는 이미 존재하거나 유효하지 않습니다" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "빌드 산출물 목록을 제공해야 합니다" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "폐기된 산출물의 재고 위치" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "할당 폐기" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "폐기된 산출물에 대한 모든 재고 할당을 폐기합니다" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "빌드 산출물 폐기 사유" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "완료된 빌드 산출물의 위치" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "불완전한 할당 허용" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "재고가 완전히 할당되지 않았더라도 산출물을 완료합니다" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "할당된 재고 소모" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "이 빌드에 이미 할당된 모든 재고를 소모합니다" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "미완료 산출물 제거" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "완료되지 않은 모든 빌드 산출물을 삭제합니다" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "허용되지 않음" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "이 빌드 주문에 의해 소모된 것으로 수락" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "이 빌드 주문을 완료하기 전에 할당을 해제하세요" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "과다 할당된 재고" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "빌드 주문에 추가로 할당된 재고 항목을 어떻게 처리하시겠습니까" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "일부 재고 항목이 과다 할당되었습니다" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "미할당 수락" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "재고 항목이 이 빌드 주문에 완전히 할당되지 않았음을 수락합니다" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "필요한 재고가 완전히 할당되지 않았습니다" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "불완전 수락" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "필요한 개수의 빌드 산출물이 완료되지 않았음을 수락합니다" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "필요한 빌드 수량이 완료되지 않았습니다" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "작업 지시서에 진행 중인 하위 작업 지시서가 있습니다" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "작업 지시서는 생산 상태여야 합니다" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "작업 지시서에 미완료 산출물이 있습니다" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "빌드 라인" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "생산 완제품" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "생산 완제품은 동일한 빌드를 가리켜야 합니다" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "빌드 라인 항목" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part는 빌드 주문과 동일한 부품을 가리켜야 합니다" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "항목은 재고에 있어야 합니다" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "사용 가능한 수량({q})을 초과했습니다" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "추적 부품을 할당하려면 생산 완제품을 지정해야 합니다" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "비추적 부품 할당에는 생산 완제품을 지정할 수 없습니다" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "할당 항목을 제공해야 합니다" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "부품을 공급할 재고 위치 (비워두면 어떤 위치에서든 가져옵니다)" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "위치 제외" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "선택한 위치의 재고 항목을 제외합니다" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "상호 대체 가능한 재고" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "여러 위치에 있는 재고 품목을 서로 대체하여 사용할 수 있습니다" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "대체 재고" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "대체 부품 할당을 허용합니다" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "선택 항목" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "빌드 주문에 선택 BOM 항목을 할당합니다" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "모든 항목" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "비추적 항목" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "추적 항목" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "항목 유형" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "자동 할당할 항목 유형을 선택하세요" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "BOM 참조" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "BOM 부품 ID" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "BOM 부품명" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "설치 대상" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "빌드" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "공급업체 부품" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "할당 수량" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "빌드 참조" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "부품 카테고리 이름" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "추적 가능" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "상속됨" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "변형(Variant) 허용" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "BOM 항목" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "생산 중" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "빌드 예정" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "외부 재고" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "사용 가능 재고" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "사용 가능 대체 재고" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "사용 가능 변형(Variant) 재고" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "소모 수량이 할당 수량을 초과합니다" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "재고 소모에 대한 선택 메모" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "빌드 항목은 올바른 빌드 주문을 가리켜야 합니다" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "빌드 항목 할당이 중복되었습니다" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "빌드 라인은 올바른 빌드 주문을 가리켜야 합니다" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "빌드 라인 할당이 중복되었습니다" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "최소 하나의 항목 또는 라인을 제공해야 합니다" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "프로젝트 코드 라벨" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "업데이트됨" @@ -1608,9 +1644,9 @@ msgstr "고유 프로젝트 코드" msgid "Project description" msgstr "프로젝트 설명" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "값이 유효성 검사 기준을 통과하지 못했습니다" msgid "Key string must be unique" msgstr "키 문자열은 고유해야 합니다" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "사용자" msgid "Price break quantity" msgstr "가격 구간 수량" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "가격" @@ -1679,560 +1715,560 @@ msgstr "가격" msgid "Unit price at specified quantity" msgstr "지정 수량에서의 단가" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "엔드포인트" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "이 웹훅을 수신하는 엔드포인트" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "이 웹훅의 이름" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "이 웹훅이 활성 상태인가요" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "토큰" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "접근용 토큰" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "시크릿" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "HMAC용 공유 시크릿" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "메시지 ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "이 메시지의 고유 식별자" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "호스트" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "이 메시지를 수신한 호스트" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "헤더" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "이 메시지의 헤더" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "본문" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "이 메시지의 본문" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "이 메시지를 수신한 엔드포인트" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "처리됨" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "이 메시지 처리가 완료되었나요?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "ID" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "제목" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "링크" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "게시됨" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "작성자" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "요약" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "읽음" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "이 뉴스 항목을 읽었나요?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "이미지 파일" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "이 이미지의 대상 모델 유형" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "이 이미지의 대상 모델 ID" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "사용자 정의 단위" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "단위 기호는 고유해야 합니다" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "단위 이름은 유효한 식별자여야 합니다" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "단위 이름" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "기호" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "선택 단위 기호" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "정의" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "단위 정의" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "첨부파일" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "파일 누락" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "외부 링크 누락" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "모델 유형" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "이미지의 대상 모델 유형" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "첨부할 파일을 선택하세요" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "댓글" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "첨부파일 댓글" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "업로드 날짜" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "파일이 업로드된 날짜" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "파일 크기" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "바이트 단위의 파일 크기" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "첨부파일에 대해 유효하지 않은 모델 유형이 지정되었습니다" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "사용자 정의 상태" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "사용자 정의 상태" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "참조 상태 세트" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "이 사용자 정의 상태로 확장되는 상태 세트" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "논리 키" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "업무 로직에서 이 사용자 정의 상태와 동일한 상태 논리 키" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "값" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "모델 데이터베이스에 저장될 숫자 값" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "상태 이름" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "라벨" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "프론트엔드에 표시될 라벨" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "색상" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "프론트엔드에 표시될 색상" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "모델" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "이 상태가 연결된 모델" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "모델을 선택해야 합니다" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "키를 선택해야 합니다" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "논리 키를 선택해야 합니다" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "키는 논리 키와 달라야 합니다" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "유효한 참조 상태 클래스가 제공되어야 합니다" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "키는 참조 상태의 논리 키들과 달라야 합니다" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "논리 키는 참조 상태의 논리 키 목록에 포함되어야 합니다" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "이름은 참조 상태의 이름들과 달라야 합니다" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "선택 목록" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "선택 목록" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "선택 목록 이름" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "선택 목록 설명" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "잠김" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "이 선택 목록이 잠겨 있나요?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "이 선택 목록을 사용할 수 있나요?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "소스 플러그인" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "선택 목록을 제공하는 플러그인" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "소스 문자열" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "이 목록에 사용된 소스를 식별하는 선택 문자열" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "기본 항목" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "이 선택 목록의 기본 항목" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "생성됨" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "선택 목록이 생성된 날짜 및 시간" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "마지막 업데이트" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "선택 목록이 마지막으로 업데이트된 날짜 및 시간" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "선택 목록 항목" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "선택 목록 항목" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "이 항목이 속한 선택 목록" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "선택 목록 항목의 값" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "선택 목록 항목 라벨" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "선택 목록 항목 설명" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "이 선택 목록 항목이 활성 상태인가요?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "매개변수 템플릿" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "매개변수 템플릿" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "체크박스 매개변수에는 단위를 지정할 수 없습니다" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "체크박스 매개변수에는 선택지를 지정할 수 없습니다" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "선택지는 고유해야 합니다" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "매개변수 템플릿 이름은 고유해야 합니다" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "이 매개변수 템플릿의 대상 모델 유형" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "매개변수 이름" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "단위" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "이 매개변수의 물리 단위" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "매개변수 설명" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "체크박스" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "이 매개변수는 체크박스인가요?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "선택지" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "이 매개변수에 대한 유효한 선택지(쉼표로 구분)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "이 매개변수의 선택 목록" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "사용" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "이 매개변수 템플릿을 사용하나요?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "매개변수" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "매개변수" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "매개변수 값에 대한 선택지가 올바르지 않습니다" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "매개변수에 지정된 모델 유형이 올바르지 않습니다" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "모델 ID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "이 매개변수의 대상 모델 ID" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "템플릿" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "매개변수 템플릿" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "데이터" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "매개변수 값" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "매개변수 값" msgid "Note" msgstr "메모" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "선택적 메모 필드" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "바코드 스캔" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "바코드 데이터" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "바코드를 스캔한 사용자" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "타임스탬프" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "바코드 스캔 날짜 및 시간" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "바코드를 처리한 URL 엔드포인트" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "컨텍스트" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "바코드 스캔의 컨텍스트 데이터" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "응답" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "바코드 스캔의 응답 데이터" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "결과" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "바코드 스캔이 성공했나요?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "오류가 발생했습니다" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: 이메일 로그 삭제가 보호되어 있습니다. 삭제를 허용하려면 INVENTREE_PROTECT_EMAIL_LOG를 False로 설정하세요." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "이메일 메시지" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "이메일 메시지" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "공지됨" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "전송됨" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "실패" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "전달됨" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "확인됨" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "수신" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "발신" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "회신 없음" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "전달 추적" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "읽음 추적" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "클릭 추적" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "전역 ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "이 메시지의 식별자(외부 시스템에서 제공될 수 있음)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "스레드 ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "이 메시지 스레드의 식별자(외부 시스템에서 제공될 수 있음)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "스레드" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "이 메시지에 연결된 스레드" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "우선순위" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "이메일 스레드" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "이메일 스레드" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "키" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "이 스레드의 고유 키(스레드 식별에 사용)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "이 스레드의 고유 식별자" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "내부 시작" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "이 스레드는 내부에서 시작되었나요?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "스레드가 생성된 날짜 및 시간" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "스레드가 마지막으로 업데이트된 날짜 및 시간" @@ -2923,8 +2959,8 @@ msgstr "부품은 기본적으로 템플릿입니다" msgid "Parts can be assembled from other components by default" msgstr "부품은 기본적으로 다른 구성요소로 조립할 수 있습니다" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "구성요소" @@ -2932,7 +2968,7 @@ msgstr "구성요소" msgid "Parts can be used as sub-components by default" msgstr "부품은 기본적으로 하위 구성요소로 사용할 수 있습니다" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "구매 가능" @@ -2940,7 +2976,7 @@ msgstr "구매 가능" msgid "Parts are purchaseable by default" msgstr "부품은 기본적으로 구매 가능합니다" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "판매 가능" @@ -2952,7 +2988,7 @@ msgstr "부품은 기본적으로 판매 가능합니다" msgid "Parts are trackable by default" msgstr "부품은 기본적으로 추적 가능합니다" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "가상" @@ -4215,8 +4251,8 @@ msgstr "내부 부품이 활성화됨" msgid "Supplier is Active" msgstr "공급업체가 활성화됨" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "제조사" @@ -4406,7 +4442,7 @@ msgstr "내부용 배송 메모" msgid "Link to address information (external)" msgstr "주소 정보 링크(외부)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "제조사 부품" @@ -4424,8 +4460,8 @@ msgstr "부품 선택" msgid "Select manufacturer" msgstr "제조사 선택" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,8 @@ msgstr "포장 단위는 0보다 커야 합니다" msgid "Linked manufacturer part must reference the same base part" msgstr "연결된 제조사 부품은 동일한 기본 부품을 참조해야 합니다" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "공급업체" msgid "Select supplier" msgstr "공급업체 선택" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "공급업체 SKU" @@ -4493,15 +4529,15 @@ msgstr "외부 공급업체 부품 링크 URL" msgid "Supplier part description" msgstr "공급업체 부품 설명" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "기본 비용" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "최소 요금(예: 보관 수수료)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "포장" @@ -4518,7 +4554,7 @@ msgstr "포장 수량" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "한 포장에 공급되는 총 수량입니다. 단품인 경우 비워 두세요." -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "배수" @@ -4542,31 +4578,31 @@ msgstr "가용성 데이터의 마지막 업데이트 날짜" msgid "Supplier Price Break" msgstr "공급업체 가격 구간" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "이 공급업체에서 사용하는 기본 통화" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "회사명" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "재고 있음" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "가격 구간" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "표시 이름" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "데이터 내보내기 중 오류가 발생했습니다" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "데이터 내보내기 플러그인이 잘못된 데이터 형식을 반환했습니다" @@ -4735,11 +4771,11 @@ msgstr "행 인덱스" msgid "Original row data" msgstr "원본 행 데이터" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "오류" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "유효" @@ -4899,55 +4935,55 @@ msgstr "프린터 위치" msgid "Scope the printer to a specific location" msgstr "프린터 범위를 특정 위치로 제한합니다" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "장비 이름" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "장비 유형" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "장비의 유형" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "드라이버" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "장비에 사용되는 드라이버" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "장비를 비활성화할 수 있습니다" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "사용 가능한 드라이버" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "오류 없음" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "초기화됨" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "장비 상태" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "장비" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "장비 구성" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "구성 유형" @@ -5066,7 +5102,7 @@ msgstr "주문" msgid "Order Complete" msgstr "주문 완료" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "내부 부품" @@ -5124,11 +5160,11 @@ msgstr "총액" msgid "Total price for this order" msgstr "이 주문의 총액" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "주문 통화" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "이 주문의 통화(비워 두면 회사 기본값 사용)" @@ -5168,7 +5204,7 @@ msgstr "시작일" msgid "Scheduled start date for this order" msgstr "이 주문의 예정 시작일" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "목표일" @@ -5477,8 +5513,8 @@ msgstr "확인자" msgid "User who checked this shipment" msgstr "이 발송을 확인한 사용자" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "발송" @@ -5544,8 +5580,8 @@ msgstr "할당 수량은 재고 수량을 초과할 수 없습니다" msgid "Allocation quantity must be greater than zero" msgstr "할당 수량은 0보다 커야 합니다" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "일련번호가 있는 재고 품목의 수량은 1이어야 합니다" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "주문 ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "복제할 주문의 ID" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "라인 복사" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "원본 주문에서 라인 항목을 복사" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "추가 라인 복사" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "원본 주문에서 추가 라인 항목을 복사" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "매개변수 복사" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "원본 주문에서 주문 매개변수를 복사" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "원본 주문에서 주문 매개변수를 복사" msgid "Line Items" msgstr "라인 항목" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "완료된 라인" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "주문 복제" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "이 주문을 복제하기 위한 옵션을 지정하세요" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "유효하지 않은 주문 ID" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "공급업체 이름" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "주문을 취소할 수 없습니다" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "미완료 라인 항목이 있어도 주문을 종료할 수 있도록 허용" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "주문에 미완료 라인 항목이 있습니다" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "주문이 열려 있지 않습니다" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "자동 가격 책정" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "공급업체 부품 데이터를 기반으로 구매 가격을 자동으로 계산" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "구매 가격 통화" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "항목 병합" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "부품, 목적지, 목표일이 같은 항목을 하나의 라인 항목으로 병합" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "내부 부품 번호" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "내부 부품 이름" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "공급업체 부품을 지정해야 합니다" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "구매 주문을 지정해야 합니다" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "공급업체는 구매 주문과 일치해야 합니다" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "구매 주문은 공급업체와 일치해야 합니다" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "라인 항목" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "수령 품목의 목적지 위치를 선택하세요" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "입고 재고 품목의 배치 코드를 입력하세요" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "만료일" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "입고 재고 품목의 만료일을 입력하세요" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "입고 재고 품목의 일련번호를 입력하세요" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "입고 재고 품목의 포장 정보를 재정의" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "입고 재고 품목에 대한 추가 메모" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "바코드" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "스캔된 바코드" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "바코드가 이미 사용 중입니다" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "라인 항목을 제공해야 합니다" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "목적지 위치를 지정해야 합니다" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "제공된 바코드 값은 고유해야 합니다" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "발송" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "완료된 발송" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "할당된 라인" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "판매 가격 통화" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "할당된 품목" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "발송 세부 정보가 제공되지 않았습니다" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "라인 항목이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "수량은 양수여야 합니다" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "할당할 일련번호를 입력하세요" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "발송이 이미 발송되었습니다" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "발송이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "다음 일련번호에 대한 일치 항목을 찾을 수 없습니다" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "다음 일련번호는 사용할 수 없습니다" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "반품 주문 라인 항목" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "라인 항목이 반품 주문과 일치하지 않습니다" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "라인 항목이 이미 수령되었습니다" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "진행 중인 주문에 대해서만 품목을 수령할 수 있습니다" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "반품 수량" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "라인 가격 통화" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "리비전 있음" msgid "BOM Valid" msgstr "BOM 유효" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "카테고리 계층 포함" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "참이면 지정된 카테고리의 하위 카테고리에 있는 항목을 포함합니다" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "숫자 카테고리 ID 또는 'null' 값으로 필터" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "조립 부품이 활성 상태" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "조립 부품을 추적할 수 있음" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "조립 부품을 테스트할 수 있음" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "구성 부품이 활성 상태" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "구성 부품을 추적할 수 있음" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "구성 부품을 테스트할 수 있음" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "구성 부품이 조립품임" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "구성 부품이 가상 부품임" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "사용 가능한 재고 있음" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "사용" @@ -6210,7 +6202,7 @@ msgstr "부품 카테고리" msgid "Part Categories" msgstr "부품 카테고리" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "기본 위치" @@ -6259,656 +6251,660 @@ msgstr "기본값" msgid "Default Parameter Value" msgstr "기본 매개변수 값" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "부품" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "잠긴 부품의 매개변수는 삭제할 수 없습니다" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "잠긴 부품의 매개변수는 수정할 수 없습니다" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "잠겨 있어 이 부품을 삭제할 수 없습니다" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "여전히 활성 상태라 이 부품을 삭제할 수 없습니다" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "조립품에 사용 중이라 이 부품을 삭제할 수 없습니다" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "부품 '{self}'은(는) '{parent}'의 BOM에 사용할 수 없습니다(순환 참조)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "부품 '{parent}'이(가) '{self}'의 BOM에 사용되고 있습니다(순환 참조)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN은 정규식 패턴 {pattern}과 일치해야 합니다" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "부품은 자기 자신의 개정이 될 수 없습니다" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "개정으로 표시된 부품에는 개정 코드가 지정되어야 합니다" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "개정은 조립 부품에만 허용됩니다" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "템플릿 부품의 개정을 만들 수 없습니다" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "상위 부품은 동일한 템플릿을 가리켜야 합니다" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "이 일련번호의 재고 항목이 이미 존재합니다" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "부품 설정에서 중복 IPN은 허용되지 않습니다" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "중복된 부품 개정이 이미 존재합니다." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "이 이름, IPN 및 개정의 부품이 이미 존재합니다." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "부품은 구조 부품 카테고리에 할당할 수 없습니다!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "부품 이름" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "템플릿 여부" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "이 부품은 템플릿 부품인가요?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "이 부품은 다른 부품의 변형(Variant)인가요?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "변형 대상" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "부품 설명(선택)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "키워드" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "검색 결과에서 가시성을 높이기 위한 부품 키워드" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "부품 카테고리" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "부품 개정 또는 버전 번호" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "개정" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "이 부품은 다른 부품의 개정인가요?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "개정 대상" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "이 항목은 보통 어디에 보관되나요?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "기본 만료" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "이 부품의 재고 항목 만료 기간(일)" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "최소 재고" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "허용되는 최소 재고 수준" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "이 부품의 측정 단위" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "이 부품을 다른 부품으로 조립/제작할 수 있나요?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "이 부품을 사용해 다른 부품을 제작할 수 있나요?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "이 부품에 고유 항목 추적 기능이 있나요?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "이 부품에 대한 테스트 결과를 기록할 수 있나요?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "이 부품을 외부 공급업체에서 구매할 수 있나요?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "이 부품을 고객에게 판매할 수 있나요?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "이 부품이 활성 상태인가요?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "잠긴 부품은 편집할 수 없습니다" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "소프트웨어 제품이나 라이선스 같은 가상 부품인가요?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "BOM 검증됨" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "이 부품의 BOM이 유효한가요?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "BOM 체크섬" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "저장된 BOM 체크섬" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOM 검증자" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "BOM 검증 날짜" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "생성 사용자" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "이 부품의 책임 소유자" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "판매 배수" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "가격 계산 캐시에 사용되는 통화" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "최소 BOM 비용" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "구성 부품의 최소 비용" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "최대 BOM 비용" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "구성 부품의 최대 비용" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "최소 구매 비용" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "과거 구매 비용의 최소값" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "최대 구매 비용" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "과거 구매 비용의 최대값" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "최소 내부 가격" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "내부 가격 구간에 기반한 최소 비용" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "최대 내부 가격" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "내부 가격 구간에 기반한 최대 비용" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "최소 공급업체 가격" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "외부 공급업체로부터의 최소 가격" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "최대 공급업체 가격" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "외부 공급업체로부터의 최대 가격" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "최소 변형 비용" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "변형 부품의 계산된 최소 비용" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "최대 변형 비용" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "변형 부품의 계산된 최대 비용" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "최소 비용" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "최소 비용 재정의" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "최대 비용" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "최대 비용 재정의" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "계산된 전체 최소 비용" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "계산된 전체 최대 비용" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "최소 판매 가격" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "가격 구간에 기반한 최소 판매 가격" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "최대 판매 가격" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "가격 구간에 기반한 최대 판매 가격" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "최소 판매 비용" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "과거 판매 가격의 최소값" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "최대 판매 비용" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "과거 판매 가격의 최대값" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "재고 조사 대상 부품" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "항목 수" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "재고 조사 시점의 개별 재고 항목 수" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "재고 조사 시점의 사용 가능한 총 재고" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "날짜" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "재고 조사가 수행된 날짜" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "최소 재고 비용" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "보유 재고의 추정 최소 비용" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "최대 재고 비용" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "보유 재고의 추정 최대 비용" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "부품 판매 가격 구간" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "부품 테스트 템플릿" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "템플릿 이름이 올바르지 않습니다 - 영숫자 문자를 최소 1개 포함해야 합니다" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "테스트 템플릿은 테스트 가능한 부품에만 만들 수 있습니다" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "같은 키의 테스트 템플릿이 이 부품에 이미 존재합니다" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "테스트 이름" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "테스트 이름을 입력하세요" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "테스트 키" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "테스트를 위한 단순화된 키" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "테스트 설명" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "이 테스트에 대한 설명을 입력하세요" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "이 테스트가 활성화되어 있나요?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "필수" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "이 테스트는 통과가 필수인가요?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "값 필요" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "테스트 결과를 추가할 때 값이 필요한가요?" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "첨부 필요" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "테스트 결과를 추가할 때 파일 첨부가 필요한가요?" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "이 테스트의 유효한 선택지(쉼표로 구분)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "수량은 0 이상이어야 합니다" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "변형 조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "상위 부품을 선택하세요" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "하위 부품" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "BOM에 사용할 부품을 선택하세요" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "이 BOM 항목의 BOM 수량" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "이 BOM 항목은 선택 사항입니다" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "이 BOM 항목은 소모품입니다(제작 주문에서 추적되지 않음)" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "설정 수량" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "설정 손실을 고려해 제작에 추가로 필요한 수량" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "손실률" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "제작 손실률 추정치(백분율, 0-100)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "반올림 배수" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "필요 생산 수량을 이 값의 가장 가까운 배수로 올림합니다" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "BOM 항목 참조" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "BOM 항목 메모" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "체크섬" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "BOM 라인 체크섬" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "검증됨" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "이 BOM 항목이 검증되었습니다" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "상속됨" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "이 BOM 항목은 변형 부품의 BOM에 상속됩니다" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "변형 부품의 재고 항목을 이 BOM 항목에 사용할 수 있습니다" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "추적 가능한 부품의 수량은 정수여야 합니다" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "하위 부품을 지정해야 합니다" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "BOM 항목 대체품" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "대체 부품은 기준 부품과 같을 수 없습니다" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "상위 BOM 항목" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "대체 부품" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "부품 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "부품 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "관련 부품 선택" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "이 관계에 대한 메모" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "부품과 자기 자신 사이에는 부품 관계를 만들 수 없습니다" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "중복된 관계가 이미 존재합니다" @@ -6956,331 +6952,319 @@ msgstr "이 재고 항목의 구매 통화" msgid "File is not an image" msgstr "파일이 이미지가 아닙니다" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "원본 부품" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "복제할 원본 부품을 선택하세요" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "이미지 복사" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "원본 부품의 이미지를 복사합니다" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "BOM 복사" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "원본 부품의 자재 명세서(BOM)를 복사합니다" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "원본 부품의 매개변수 데이터를 복사합니다" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "메모 복사" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "원본 부품의 메모를 복사합니다" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "테스트 복사" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "원본 부품의 테스트 템플릿을 복사합니다" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "초기 재고 수량" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "이 부품의 초기 재고 수량을 지정하세요. 수량이 0이면 재고가 추가되지 않습니다." -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "초기 재고 위치" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "이 부품의 초기 재고 위치를 지정하세요" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "공급업체를 선택하세요(또는 비워 두고 건너뛰기)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "제조사를 선택하세요(또는 비워 두고 건너뛰기)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "제조사 부품 번호" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "선택한 회사는 유효한 공급업체가 아닙니다" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "선택한 회사는 유효한 제조사가 아닙니다" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "이 MPN과 일치하는 제조사 부품이 이미 존재합니다" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "이 SKU와 일치하는 공급업체 부품이 이미 존재합니다" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "카테고리 이름" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "제작 중" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "현재 생산 중인 이 부품의 수량" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "제작 예정인 이 부품의 미완료 수량" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "재고 항목" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "개정" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "총 재고" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "미할당 재고" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "변형 재고" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "부품 복제" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "다른 부품에서 초기 데이터를 복사합니다" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "이미지 복사" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "원본 부품의 이미지를 복사합니다" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "BOM 복사" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "원본 부품의 자재 명세서(BOM)를 복사합니다" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "메모 복사" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "원본 부품의 메모를 복사합니다" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "테스트 복사" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "원본 부품의 테스트 템플릿을 복사합니다" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "초기 재고" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "초기 재고 수량과 함께 부품을 생성합니다" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "공급업체 정보" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "이 부품에 대한 초기 공급업체 정보를 추가합니다" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "카테고리 매개변수 복사" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "선택한 부품 카테고리의 매개변수 템플릿을 복사합니다" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "기존 이미지" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "기존 부품 이미지의 파일명" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "이미지 파일이 존재하지 않습니다" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "전체 자재 명세서(BOM) 검증" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "제작 가능" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "제작 주문에 필요" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "제작 주문에 할당됨" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "판매 주문에 필요" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "판매 주문에 할당됨" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "부품 IPN" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "부품 설명" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "재고 조사 정보를 생성할 부품을 선택하세요(및 모든 변형 부품)." -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "해당 카테고리(및 하위 카테고리)의 모든 부품을 포함할 카테고리를 선택하세요" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "해당 위치(하위 위치 포함)에 재고가 있는 모든 부품을 포함할 위치를 선택하세요" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "재고 조사 항목 생성" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "선택한 부품에 대한 재고 조사 항목을 저장합니다" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "보고서 생성" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "선택한 부품에 대한 재고 조사 보고서를 생성합니다" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "최소 가격" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "계산된 최소 가격 값을 재정의합니다" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "최소 가격 통화" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "최대 가격" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "계산된 최대 가격 값을 재정의합니다" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "최대 가격 통화" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "업데이트" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "이 부품의 가격 정보를 업데이트합니다" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "제공된 통화를 {default_currency}(으)로 변환할 수 없습니다" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "최소 가격은 최대 가격보다 클 수 없습니다" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "최대 가격은 최소 가격보다 작을 수 없습니다" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "상위 조립품을 선택하세요" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "구성 부품을 선택하세요" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "BOM을 복사할 부품을 선택하세요" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "기존 데이터 제거" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "복사하기 전에 기존 BOM 항목을 제거합니다" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "상속 항목 포함" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "템플릿 부품에서 상속된 BOM 항목 포함" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "잘못된 행 건너뛰기" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "이 옵션을 사용하면 잘못된 행을 건너뜁니다" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "대체 부품 복사" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOM 항목을 복제할 때 대체 부품도 복사" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "바코드에 대한 기본 지원을 제공합니다" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "짧은 바코드 접두사" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "짧은 바코드에 사용할 접두사를 사용자 지정합니다. 여러 InvenTree 인스턴스가 있는 환경에서 유용할 수 있습니다" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "빌드 자동 생성" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "조립품에 대한 빌드 주문을 자동으로 생성합니다" @@ -9453,8 +9437,8 @@ msgstr "재고 항목이 제공되지 않았습니다" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "수량은 사용 가능한 재고 수량({q})을(를) 초과할 수 없습니다" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "대상 재고 위치" @@ -9626,7 +9610,7 @@ msgstr "재고 항목이 이미 재고에 있습니다" msgid "Quantity must not be negative" msgstr "수량은 음수일 수 없습니다" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "기존 재고로 병합" @@ -9642,15 +9626,20 @@ msgstr "재고 거래 메모" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "가능하면 반품된 항목을 기존 재고 항목에 병합합니다" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "다음 일련 번호" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "이전 일련 번호" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index f87f7c5666..93f1ae84e5 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -89,7 +89,7 @@ msgstr "Nepavyko konvertuoti {original} į {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Pateiktas neteisingas kiekis" @@ -97,16 +97,16 @@ msgstr "Pateiktas neteisingas kiekis" msgid "Error details can be found in the admin panel" msgstr "Išsami klaidos informacija pateikta administravimo skydelyje" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Įveskite datą" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Neteisinga dešimtainė reikšmė" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Nuorodos numeris per didelis" msgid "Invalid choice" msgstr "Neteisingas pasirinkimas" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Pavadinimas" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Aprašymas" msgid "Description (optional)" msgstr "Aprašymas (neprivalomas)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Kelias" @@ -334,7 +334,7 @@ msgstr "Serverio klaida" msgid "An error has been logged by the server." msgstr "Serveris užfiksavo klaidą." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Paveikslėlis" msgid "Must be a valid number" msgstr "Turi būti teisingas skaičius" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valiuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Pasirinkite valiutą iš galimų variantų" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Kopijuoti parametrus" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Kopijuoti eilutes" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Kopijuoti eilutės įrašus iš pradinio užsakymo" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Kopijuoti papildomas eilutes" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Kopijuoti papildomas eilutes iš pradinio užsakymo" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabų" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Netinkamas valiutos kodas" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Užsakymo būsena" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Pirminė gamyba" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Įtraukti variantus" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Įtraukti variantus" msgid "Part" msgstr "Detalė" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategorija" @@ -661,125 +701,126 @@ msgstr "Neįtraukti medžio struktūros" msgid "Build must be cancelled before it can be deleted" msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Pasirinktinai" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Surinkimas" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Sekama" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testuojama" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Liko neįvykdytų užsakymų" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Priskirta" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Užsakyta" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Gamybos užsakymas" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Vieta" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Gamybos užsakymai" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Surinkimo BOM nėra patvirtintas" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Negalima sukurti gamybos užsakymo neaktyviai detalei" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Negalima sukurti gamybos užsakymo atrakintai detalei" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Turi būti nurodytas atsakingas vartotojas arba grupė" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Gamybos užsakymo detalės keisti negalima" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Tikslinė data turi būti po pradžios datos" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Gamybos užsakymo nuoroda" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Gamybos užsakymo nuoroda" msgid "Reference" msgstr "Nuoroda" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Trumpas gamybos aprašymas (neprivalomas)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Pasirinkite detalę gamybai" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Pardavimo užsakymo nuoroda" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Šaltinio vieta" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Pasirinkite vietą atsargoms paimti šiai gamybai (palikite tuščią, jei tinka bet kuri vieta)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Paskirties vieta" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Pasirinkite vietą, kur bus laikomos užbaigtos prekės" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Gamybos kiekis" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Atsargų kiekis, kurias reikia pagaminti" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Užbaigtos prekės" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Užbaigtų atsargų elementų skaičius" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Gamybos būsena" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Gamybos būsenos kodas" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Partijos kodas" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Šios gamybos partijos kodas" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Sukūrimo data" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Gamybos pradžios data" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Planuojama šio gamybos užsakymo pradžios data" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Tikslinė užbaigimo data" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Planuojama gamybos pabaigos data. Po šios datos gamyba bus pavėluota." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Užbaigimo data" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "Užbaigė" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Išdavė" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Vartotojas, kuris išdavė šį gamybos užsakymą" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Atsakingas" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Vartotojas ar grupė, atsakinga už šį gamybos užsakymą" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Išorinė nuoroda" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Nuoroda į išorinį URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Gamybos prioritetas" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Šio gamybos užsakymo prioritetas" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Projekto kodas" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Šio gamybos užsakymo projekto kodas" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Sekamoms detalėms būtina nurodyti serijos numerius" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nepateiktas gamybos rezultatas" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Gamybos rezultatas jau užbaigtas" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Gamybos rezultatas neatitinka gamybos užsakymo" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Kiekis turi būti didesnis nei nulis" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Kiekis negali viršyti rezultato kiekio" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Gamybos užsakymo eilutės įrašas" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Gamybos objektas" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Gamybos objektas" msgid "Quantity" msgstr "Kiekis" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Reikalingas kiekis gamybos užsakymui" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Pasirinktas atsargų elementas neatitinka BOM eilutės" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Atsargoms su serijos numeriais kiekis turi būti 1" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Atsargų elementas per daug paskirstytas" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Atsargų elementas" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Šaltinio atsargų elementas" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Atsargų kiekis, skirtas paskirstyti į gamybą" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Įdiegti į" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Paskirties atsargų elementas" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Gamybos lygis" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Detalės pavadinimas" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Gamybos rezultatas" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Gamybos rezultatas neatitinka pirminės gamybos" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Rezultato detalė neatitinka gamybos užsakymo detalės" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Šis gamybos rezultatas jau užbaigtas" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Šis gamybos rezultatas nėra visiškai paskirstytas" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Įveskite kiekį gamybos rezultatui" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Sekamoms detalėms reikalingas sveikasis kiekis" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Serijos numeriai" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Įveskite serijos numerius gamybos rezultatams" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Atsargų vieta gamybos rezultatams" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Automatiškai priskirti serijos numerius" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Turi būti pateiktas gamybos rezultatų sąrašas" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Atsargų vieta brokuotiems rezultatams" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Atmesti priskyrimus" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Atmesti visus atsargų priskyrimus brokuotiems rezultatams" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Priežastis, dėl kurios gamybos rezultatas(-ai) buvo nurašytas(-i)" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Vieta, kur laikomi užbaigti gamybos rezultatai" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Priimti nepilną priskyrimą" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Sunaudoti priskirtas atsargas" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "Sunaudoti bet kokias šiai gamybai jau priskirtas atsargas" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Pašalinti nebaigtus rezultatus" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Ištrinti visus nebaigtus gamybos rezultatus" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Neleidžiama" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Priimti kaip sunaudotą šio gamybos užsakymo metu" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Panaikinkite priskyrimus prieš užbaigiant šį gamybos užsakymą" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Per daug paskirstytos atsargos" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Kai kurios atsargos paskirstytos per daug" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Priimti nepriskirtą" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Reikalingos atsargos nėra visiškai priskirtos" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Priimti nepilną" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Reikalingas gamybos kiekis nebuvo užbaigtas" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "Gamybos užsakymas turi nebaigtų antrinių gamybų" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Gamybos užsakymas turi būti gamybos būsenoje" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Gamybos užsakymas turi nebaigtų rezultatų" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Gamybos eilutė" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Gamybos rezultatas" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Gamybos rezultatas turi būti susietas su ta pačia gamyba" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Gamybos eilutės įrašas" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Prekė turi būti atsargose" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Viršytas prieinamas kiekis ({q})" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "Sekamų detalių priskyrymui turi būti nurodytas gamybos rezultatas" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Negalima nurodyti gamybos rezultato nesekamoms detalėms" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Turi būti pateikti paskirstymo elementai" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Neįtraukti vietos" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Neįtraukti atsargų iš šios pasirinktos vietos" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Keičiamos atsargos" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Atsargos iš skirtingų vietų gali būti naudojamos pakaitomis" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Pakaitinės atsargos" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Leisti priskirti pakaitines detales" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Pasirenkami elementai" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Priskirti papildomus BOM elementus gamybos užsakymui" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "BOM nuoroda" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "BOM detalės ID" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "BOM detalės pavadinimas" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Gamyba" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Tiekėjo detalė" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Priskirtas kiekis" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Gamybos nuoroda" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Detalės kategorijos pavadinimas" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Sekama" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "BOM elementas" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Gamyboje" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Išorinės atsargos" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Prieinamos atsargos" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Prieinamos pakaitinės atsargos" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Prieinamos variantų atsargos" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Projekto kodo etiketė" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Atnaujinta" @@ -1608,9 +1644,9 @@ msgstr "Unikalus projekto kodas" msgid "Project description" msgstr "Projekto aprašymas" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Reikšmė neatitinka patikros taisyklių" msgid "Key string must be unique" msgstr "Raktas turi būti unikalus" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Vartotojas" msgid "Price break quantity" msgstr "Kiekio ribinis taškas kainai" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Kaina" @@ -1679,560 +1715,560 @@ msgstr "Kaina" msgid "Unit price at specified quantity" msgstr "Vieneto kaina nurodytam kiekiui" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Galutinis taškas" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Galutinis taškas, kuriuo priimamas šis webhook'as" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Šio webhook'o pavadinimas" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Ar šis webhook'as aktyvus" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Raktas" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Prieigos raktas" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Slaptas raktas" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Bendras slaptas HMAC raktas" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Pranešimo ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Unikalus pranešimo identifikatorius" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Pagrindinis serveris" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Serveris, iš kurio gautas pranešimas" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Antraštė" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Šio pranešimo antraštė" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Turinys" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Šio pranešimo turinys" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Galutinis taškas, kuriame gautas pranešimas" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Apdorota" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Ar darbas su šiuo pranešimu baigtas?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "ID" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Pavadinimas" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Nuoroda" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Paskelbta" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autorius" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Santrauka" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Perskaityta" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Ar ši naujiena buvo perskaityta?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Paveikslėlio failas" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Modelio tipas, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "Modelio ID, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Pasirinktinis vienetas" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Vieneto simbolis turi būti unikalus" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Vieneto pavadinimas turi būti tinkamas identifikatorius" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Vieneto pavadinimas" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Simbolis" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Nebūtinas vieneto simbolis" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Apibrėžimas" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Vieneto apibrėžimas" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Priedas" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Trūksta failo" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Trūksta išorinės nuorodos" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Modelio tipas" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Modelio tipas, kuriam skirtas paveikslėlis" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Pasirinkite failą priedui" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Komentaras" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Komentaras prie priedo" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Įkėlimo data" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Failo įkėlimo data" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Failo dydis" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Failo dydis baitais" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Netinkamas modelio tipas priedui" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Pasirinktinė būsena" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Pasirinktinės būsenos" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Nuorodos būsenų rinkinys" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Būsenų rinkinys, papildomas šia pasirinktine būsena" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Loginis raktas" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Loginis būsenos raktas, atitinkantis šią pasirinkitinę būseną" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Reikšmė" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Skaitinė reikšmė, saugoma modelio duomenų bazėje" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Būsenos pavadinimas" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketė" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Etiketė, rodoma vartotojo sąsajoje" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Spalva" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Spalva, rodoma vartotojo sąsajoje" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Modelis" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Modelis, su kuriuo susieta būsena" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Turi būti pasirinktas modelis" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Turi būti pasirinktas raktas" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Turi būti pasirinktas loginis raktas" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "Raktas turi skirtis nuo loginio rakto" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Turi būti pateikta tinkama nuorodos būsenos klasė" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "Raktas turi skirtis nuo nuorodos būsenų loginių raktų" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "Loginis raktas turi būti tarp nuorodos būsenų loginių raktų" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Pavadinimas turi skirtis nuo nuorodos būsenų pavadinimų" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Pasirinkimų sąrašas" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Pasirinkimų sąrašai" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Pasirinkimų sąrašo pavadinimas" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Pasirinkimų sąrašo aprašymas" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Užrakinta" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Ar šis sąrašas užrakintas?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Ar šį pasirinkimų sąrašą galima naudoti?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Šaltinio papildinys" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Papildinys, pateikiantis šį pasirinkimų sąrašą" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Šaltinio eilutė" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Neprivaloma eilutė, identifikuojanti šaltinį, naudotą šiam sąrašui" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Numatytasis įrašas" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Numatytasis šio pasirinkimų sąrašo įrašas" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Sukurta" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Data ir laikas, kada buvo sukurtas pasirinkimų sąrašas" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Paskutinį kartą atnaujinta" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Data ir laikas, kada paskutinį kartą buvo atnaujintas sąrašas" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Pasirinkimų sąrašo įrašas" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Pasirinkimų sąrašo įrašai" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Pasirinkimų sąrašas, kuriam priklauso šis įrašas" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Pasirinkimų sąrašo įrašo reikšmė" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Pasirinkimų įrašo etiketė" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Pasirinkimų įrašo aprašymas" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Ar šis sąrašo įrašas aktyvus?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Parametro šablonas" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Pasirinkimai turi būti unikalūs" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Parametro šablono pavadinimas turi būti unikalus" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Parametro pavadinimas" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Vienetai" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Fiziniai šio parametro vienetai" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Parametro aprašymas" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Žymimasis laukelis" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Ar šis parametras yra žymimasis laukelis?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Pasirinkimai" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Pasirinkimų sąrašas šiam parametrui" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Įjungta" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Šablonas" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Data" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Parametro reikšmė" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Parametro reikšmė" msgid "Note" msgstr "Pastaba" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Neprivalomas pastabų laukas" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Brūkšninio kodo nuskaitymas" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Brūkšninio kodo duomenys" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Vartotojas, nuskaitęs brūkšninį kodą" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Laiko žymė" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Brūkšninio kodo nuskaitymo data ir laikas" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "URL galutinis taškas, kuris apdorojo brūkšninį kodą" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Kontekstas" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Konteksto duomenys brūkšninio kodo nuskaitymui" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Atsakas" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Atsako duomenys iš brūkšninio kodo nuskaitymo" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Rezultatas" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Ar brūkšninio kodo nuskaitymas buvo sėkmingas?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Raktas" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponentas" @@ -2932,7 +2968,7 @@ msgstr "Komponentas" msgid "Parts can be used as sub-components by default" msgstr "Detalės pagal nutylėjimą gali būti naudojamos kaip sub-komponentai" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Galima įsigyti" @@ -2940,7 +2976,7 @@ msgstr "Galima įsigyti" msgid "Parts are purchaseable by default" msgstr "Detalės pagal nutylėjimą gali būti įsigyjamos" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Parduodama" @@ -2952,7 +2988,7 @@ msgstr "Detalės pagal nutylėjimą gali būti parduodamos" msgid "Parts are trackable by default" msgstr "Detalės pagal nutylėjimą gali būti sekamos" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuali" @@ -4215,8 +4251,8 @@ msgstr "Vidinė detalė yra aktyvi" msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Gamintojas" @@ -4406,7 +4442,7 @@ msgstr "Siuntimo pastabos vidiniam naudojimui" msgid "Link to address information (external)" msgstr "Nuoroda į adreso informaciją (išorinė)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Gamintojo detalė" @@ -4424,8 +4460,8 @@ msgstr "Pasirinkite detalę" msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Tiekėjas" msgid "Select supplier" msgstr "Pasirinkite tiekėją" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Tiekėjo sandėlio numeris (SKU)" @@ -4493,15 +4529,15 @@ msgstr "Išorinės nuorodos į tiekėjo detalės URL" msgid "Supplier part description" msgstr "Tiekėjo detalės aprašymas" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "bazinė kaina" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Pakuotė" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "daugiklis" @@ -4542,31 +4578,31 @@ msgstr "Paskutinio prieinamumo duomenų atnaujinimo data" msgid "Supplier Price Break" msgstr "Tiekėjo kainos ribos" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Numatytoji valiuta, naudojama šiam tiekėjui" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Įmonės pavadinimas" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Sandėlyje" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Įvyko klaida eksportuojant duomenis" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Duomenų eksporto įskiepis grąžino neteisingą duomenų formatą" @@ -4735,11 +4771,11 @@ msgstr "Eilutės indeksas" msgid "Original row data" msgstr "Pradiniai eilutės duomenys" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Klaidos" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Galiojantis" @@ -4899,55 +4935,55 @@ msgstr "Spausdintuvo vieta" msgid "Scope the printer to a specific location" msgstr "Apriboti spausdintuvo veikimą konkrečia vieta" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Įrenginio pavadinimas" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Įrenginio tipas" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Įrenginio rūšis" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Tvarkyklė" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Įrenginiui naudojama tvarkyklė" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Įrenginiai gali būti išjungti" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Tvarkyklė prieinama" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Klaidų nėra" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Inicializuota" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Įrenginio būsena" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Įrenginys" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Įrenginio konfigūracija" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Konfigūracijos tipas" @@ -5066,7 +5102,7 @@ msgstr "Užsakymas" msgid "Order Complete" msgstr "Užsakymas įvykdytas" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Vidinė detalė" @@ -5124,11 +5160,11 @@ msgstr "Bendra kaina" msgid "Total price for this order" msgstr "Bendra kaina už šį užsakymą" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Užsakymo valiuta" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Užsakymo valiuta (palikite tuščią, jei norite naudoti įmonės numatytąją valiutą)" @@ -5168,7 +5204,7 @@ msgstr "Pradžios data" msgid "Scheduled start date for this order" msgstr "Numatyta pradžios data šiam užsakymui" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Tikslinė data" @@ -5477,8 +5513,8 @@ msgstr "Patikrino" msgid "User who checked this shipment" msgstr "Vartotojas, patikrinęs šią siuntą" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Siunta" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Kiekis turi būti 1, jei prekė turi serijos numerį" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "Užsakymo ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "Užsakymo, kurį reikia dubliuoti, ID" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Kopijuoti eilutes" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Kopijuoti eilutės įrašus iš pradinio užsakymo" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Kopijuoti papildomas eilutes" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Kopijuoti papildomas eilutes iš pradinio užsakymo" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Kopijuoti parametrus" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Eilutės įrašai" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Užbaigtos eilutės" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Dubliuoti užsakymą" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Nurodykite užsakymo dubliavimo parinktis" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Neteisingas užsakymo ID" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Tiekėjo pavadinimas" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Užsakymo atšaukti negalima" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Užsakyme yra neužbaigtų eilutės įrašų" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Užsakymas nėra atidarytas" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Automatinis kainų nustatymas" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Pirkimo kainos valiuta" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Sujungti elementus" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Vidinis detalės numeris" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Vidinis detalės pavadinimas" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Turi būti nurodyta tiekėjo detalė" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Turi būti nurodytas pirkimo užsakymas" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Tiekėjas turi atitikti pirkimo užsakymą" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Pirkimo užsakymas turi atitikti tiekėją" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Eilutės įrašas" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Pasirinkite paskirties vietą gautiems elementams" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Įveskite partijos kodą gaunamoms atsargoms" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Galiojimo data" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Įveskite galiojimo datą gaunamoms atsargoms" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Įveskite gaunamų atsargų serijos numerius" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Pakeisti gaunamų atsargų pakavimo informaciją" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Papildoma pastaba gaunamoms atsargoms" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Brūkšninis kodas" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Nuskaitytas brūkšninis kodas" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Brūkšninis kodas jau naudojamas" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Turi būti pateikti eilutės įrašai" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Turi būti nurodyta paskirties vieta" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Pateiktos brūkšninių kodų reikšmės turi būti unikalios" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Siuntos" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Užbaigtos siuntos" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Pardavimo kainos valiuta" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Paskirstyti elementai" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Nepateikta siuntos informacija" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 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:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Kiekis turi būti teigiamas" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Įveskite priskiriamus serijos numerius" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Siunta jau išsiųsta" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Siunta nėra susieta su šiuo užsakymu" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Nerasta atitikmenų šiems serijos numeriams" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Šie serijos numeriai nepasiekiami" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Eilutės įrašas neatitinka grąžinimo užsakymo" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Eilutės įrašas jau gautas" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Grąžinamas kiekis" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Eilutės kainos valiuta" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "Turi versijų" msgid "BOM Valid" msgstr "BOM galiojantis" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Surinkimo detalė gali būti testuojama" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Komponento detalė gali būti testuojama" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Naudoja" @@ -6210,7 +6202,7 @@ msgstr "Detalių kategorija" msgid "Part Categories" msgstr "Detalių kategorijos" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Numatytoji vieta" @@ -6259,656 +6251,660 @@ msgstr "Numatytoji reikšmė" msgid "Default Parameter Value" msgstr "Numatytoji parametro reikšmė" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Detalės" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Negalima ištrinti šios detalės, nes ji užrakinta" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Negalima ištrinti šios detalės, nes ji vis dar aktyvi" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Negalima ištrinti šios detalės, nes ji naudojama sirinkime" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Detalė „{self}“ negali būti naudojama detalių sąraše „{parent}“ (rekursyviai)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Detalė „{parent}“ naudojama detalių sąraše „{self}“ (rekursyviai)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN turi atitikti regex šabloną {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Detalė negali būti savo pačios versija" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Versijos leidžiamos tik surinkimo detalėms" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Negalima sukurti šabloninės detalės versijos" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "Pagrindinė detalė turi būti susieta su tuo pačiu šablonu" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Atsargų elementas su šiuo serijos numeriu jau egzistuoja" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dublikatų detalių nustatymuose naudoti negalima" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Tokia detalės versija jau egzistuoja." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Detalė su tokiu pavadinimu, IPN ir versija jau egzistuoja." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Detalės negali būti priskirtos struktūrinėms detalių kategorijoms!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Detalės pavadinimas" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Yra šablonas" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ar ši detalė yra šabloninė detalė?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Ar ši detalė yra kitos detalės variantas?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variantas iš" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Detalės aprašymas (neprivalomas)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Raktažodžiai" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Detalės raktažodžiai, skirti pagerinti matomumą paieškos rezultatuose" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Detalės kategorija" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Detalės versija arba numeris" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Versija" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Ar ši detalė yra kitos detalės versija?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Versija iš" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Kur ši detalė paprastai laikoma?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Numatytasis galiojimo laikas" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Šios detalės atsargų galiojimo laikas (dienomis)" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimalus atsargų kiekis" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Mažiausias leidžiamas atsargų kiekis" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Šios detalės matavimo vienetai" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Ar ši detalė gali būti pagaminta iš kitų detalių?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Ar ši detalė gali būti naudojama kitoms detalėms gaminti?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Ar ši detalė turi unikalių vienetų sekimą?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Ar šiai detalei gali būti priskirti bandymų rezultatai?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Ar ši detalė gali būti perkama iš išorinių tiekėjų?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Ar ši detalė gali būti parduodama klientams?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Ar ši detalė yra aktyvi?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Užrakintos detalės negali būti redaguojamos" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ar tai virtuali detalė, pavyzdžiui, programinė įranga ar licencija?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "BOM kontrolinė suma" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Išsaugota BOM kontrolinė suma" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Detalių sąrašą patikrino" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Detalių sąrašo patikrinimo data" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Sukūręs vartotojas" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Atsakingas vartotojas už šią detalę" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Parduodamas kiekis" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Valiuta, naudojama kainų skaičiavimams kaupti" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimali BOM kaina" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Minimali komponentų detalių kaina" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maksimali BOM kaina" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Maksimali komponentų detalių kaina" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimali pirkimo kaina" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Mažiausia istorinė pirkimo kaina" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maksimali pirkimo kaina" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Didžiausia istorinė pirkimo kaina" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimali vidinė kaina" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Mažiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maksimali vidinė kaina" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Didžiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Mažiausia tiekėjo kaina" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Mažiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Didžiausia tiekėjo kaina" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Didžiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Mažiausia varianto kaina" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Apskaičiuota minimali variantų detalių kaina" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Didžiausia varianto kaina" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Apskaičiuota didžiausia variantų detalių kaina" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimali kaina" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Nepaisyti minimalios kainos" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maksimali kaina" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Nepaisyti maksimalios kainos" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Apskaičiuota bendra minimali kaina" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Apskaičiuota bendra maksimali kaina" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Minimali pardavimo kaina" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Mažiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Didžiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Mažiausia pardavimo kaina" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Mažiausia istorinė pardavimo kaina" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Didžiausia istorinė pardavimo kaina" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Detalė inventorizacijai" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Vienetų skaičius" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Atsargų įrašų skaičius inventorizacijos metu" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Bendras prieinamas atsargų kiekis inventorizacijos metu" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Data" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Inventorizacijos atlikimo data" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Minimali atsargų kaina" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Apytikslė minimali turimų atsargų kaina" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maksimali atsargų kaina" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Apytikslė maksimali turimų atsargų kaina" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Detalės kainų intervalai pardavimui" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Detalės bandymų šablonas" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "Bandymų šablonus galima kurti tik testuojamoms detalėms" -#: part/models.py:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Bandymo pavadinimas" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Įveskite bandymo pavadinimą" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Bandymo raktas" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Supaprastintas bandymo raktas" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Bandymo aprašymas" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Įveskite šio bandymo aprašymą" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Ar šis bandymas įjungtas?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Privalomas" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Ar šį bandymą būtina išlaikyti?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Reikalauja reikšmės" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Reikalauja priedo" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Galimi pasirinkimai šiam bandymui (atskirti kableliais)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM elemento keisti negalima - surinkimas užrakintas" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM elemento keisti negalima - varianto surinkimas užrakintas" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Pasirinkite pirminę detalę" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Pavaldi detalė" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Pasirinkite detalę, naudojamą BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "BOM reikalingas šios detalės kiekis" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Šis BOM elementas yra pasirenkamas" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "BOM nuoroda" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "BOM pastabos" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Kontrolinė suma" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "BOM eilutės kontrolinė suma" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Patvirtinta" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Šis BOM elementas patvirtintas" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Paveldima" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Šį BOM elementą paveldi variantų sąrašai" -#: part/models.py:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Sekamoms detalėms kiekis turi būti sveikasis skaičius" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Turi būti nurodyta pavaldi detalė" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "BOM elemento pakaitalas" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Pagrindinis BOM elementas" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Pakaitinė detalė" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Detalė 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Detalė 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Pasirinkite susijusią detalę" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Pastaba šiam ryšiui" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Toks ryšys jau egzistuoja" @@ -6956,331 +6952,319 @@ msgstr "Šio atsargų elemento pirkimo valiuta" msgid "File is not an image" msgstr "Failas nėra paveikslėlis" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Pradinė detalė" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Pasirinkite pradinę detalę kopijavimui" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kopijuoti paveikslėlį" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Kopijuoti paveikslėlį iš pradinės detalės" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Kopijuoti BOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Kopijuoti parametrų duomenis iš pradinės detalės" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Kopijuoti pastabas" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Kopijuoti pastabas iš pradinės detalės" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Pradinis atsargų kiekis" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Pradinė atsargų vieta" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Nurodykite pradinę atsargų vietą šiai detalei" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Pasirinkite tiekėją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Pasirinkite gamintoją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Gamintojo detalės numeris" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Pasirinkta įmonė nėra galiojantis gamintojas" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Kategorijos pavadinimas" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Surinkimas" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Atsargos" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Versijos" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Bendros atsargos" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Nepriskirtos atsargos" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Variantų atsargos" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Kopijuoti detalę" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Kopijuoti pradinius duomenis iš kitos detalės" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kopijuoti paveikslėlį" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Kopijuoti paveikslėlį iš pradinės detalės" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Kopijuoti BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Kopijuoti pastabas" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Kopijuoti pastabas iš pradinės detalės" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Pradinės atsargos" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Sukurti detalę su pradiniu atsargų kiekiu" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Tiekėjo informacija" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Kopijuoti kategorijos parametrus" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Esamas paveikslėlis" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Esamos detalės paveikslėlio failo pavadinimas" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Paveikslėlio failas neegzistuoja" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Patvirtinti visą komplektavimo žiniaraštį" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Galima surinkti" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Mažiausia kaina" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Pakeisti apskaičiuotą mažiausią kainą" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Mažiausios kainos valiuta" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Didžiausia kaina" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Pakeisti apskaičiuotą didžiausią kainą" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Didžiausios kainos valiuta" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Atnaujinti" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Atnaujinti šios detalės kainodarą" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nepavyko konvertuoti iš nurodytų valiutų į {default_currency}" -#: part/serializers.py:1591 +#: part/serializers.py:1558 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:1594 +#: part/serializers.py:1561 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:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Pasirinkite pirminį surinkimą" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Pasirinkite komponentinę detalę" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Pašalinti esamus duomenis" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Pašalinti esamus BOM elementus prieš kopijuojant" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Įtraukti paveldėtus" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Įtraukti BOM elementus, paveldėtus iš šabloninių detalių" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Praleisti netinkamas eilutes" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Kopijuoti pakaitines detales" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Suteikia vietinį brūkšninių kodų palaikymą" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Trumpo brūkšninio kodo priešdėlis" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Pritaikykite trumpųjų brūkšninių kodų priešdėlį - naudinga, kai naudojami keli InvenTree egzemplioriai" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Paskirties atsargų vieta" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Atsargų operacijos pastabos" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Kitas serijos numeris" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Ankstesnis serijos numeris" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index e642d3ea78..b756ac0b4d 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -89,7 +89,7 @@ msgstr "Nevarēja konvertēt {original} par {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" @@ -97,16 +97,16 @@ msgstr "Norādītais daudzums nav derīgs" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Ievadiet datumu" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "" @@ -334,7 +334,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 3d0785f14a..c380639849 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -89,7 +89,7 @@ msgstr "{original} kon niet worden omgezet naar {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" @@ -97,16 +97,16 @@ msgstr "Ongeldige hoeveelheid ingevoerd" msgid "Error details can be found in the admin panel" msgstr "Error details kunnen worden gevonden in het admin scherm" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Voer datum in" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Ongeldige decimale waarde" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referentienummer is te groot" msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Omschrijving" msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Pad" @@ -334,7 +334,7 @@ msgstr "Serverfout" msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Afbeelding" msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" @@ -373,6 +373,46 @@ msgstr "Inhoudstype niet gevonden" msgid "Content type does not match required mixin class" msgstr "Content type komt niet overeen met de vereiste mixin klasse" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Parameters kopiëren" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Kopieer regels" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Kopieer regelitems uit de oorspronkelijke bestelling" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Extra regels kopiëren" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Extra regelitems van de oorspronkelijke bestelling kopiëren" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabisch" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Geen geldige valutacode" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Status van bestelling" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Inclusief varianten" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Inclusief varianten" msgid "Part" msgstr "Onderdeel" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Categorie" @@ -661,125 +701,126 @@ msgstr "Boomstructuur uitsluiten" msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Optioneel" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Samenstelling" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testbaar" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Openstaande order" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Verbruikt" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "In bestelling" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "Build niet gevonden" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Productieorder" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Locatie" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Uitvoer" -#: build/api.py:1107 +#: build/api.py:1120 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:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Productieorders" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Assemblage stuklijst is niet gevalideerd" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Bouw bestelling kan niet worden aangemaakt voor een inactief onderdeel" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Maken opdracht kan niet worden gemaakt voor een ontgrendeld onderdeel" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Bestellingen bouwen kan alleen extern worden vervuld voor aankochte onderdelen" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Verantwoorde gebruiker of groep moet worden opgegeven" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Bouworder onderdeel kan niet worden gewijzigd" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Doeldatum moet na startdatum zijn" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Productieorderreferentie" msgid "Reference" msgstr "Referentie" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Korte beschrijving van de build (optioneel)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Productie-opdracht waar dit product aan is toegewezen" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Selecteer onderdeel om te produceren" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Verkooporder Referentie" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "Productieopdracht waar dit productie aan is toegewezen" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Bronlocatie" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecteer de locatie waar de voorraad van de productie vandaan moet komen (laat leeg om vanaf elke standaard locatie te nemen)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Externe bouw" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Deze bouw opdracht is extern uitgevoerd" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Productiehoeveelheid" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te produceren" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Productiestatus" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Bouw start datum" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Geplande startdatum voor deze bestelling" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Doeldatum voor productie voltooiing. Productie zal achterstallig zijn na deze datum." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "voltooid door" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Uitgegeven door" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Externe Link" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link naar externe URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Bouw prioriteit" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Project code" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "Kan de bouwopdracht niet voltooien zolang onderliggende bouwopdrachten nog openstaan" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Kan de bouwopdracht niet voltooien zolang de output onvolledig is" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "Build output heeft niet alle vereiste tests doorstaan" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "Voorraadproducten zijn nog in productie" -#: build/models.py:1151 +#: build/models.py:1136 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:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Bouw order regel item" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Bouw object" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Bouw object" msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Aantal van verbruikte voorraad" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "Toegewezen hoeveelheid moet groter zijn dan nul" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Installeren in" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Bouw level" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Onderdeel naam" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Voorraad locatie voor project uitvoer" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Toegewezen voorraad gebruiken" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "Bouw opdracht heeft open sub bouw orders" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Bouwen moet in de productiestatus staan" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "Alle artikelen" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "Niet Gevolgde items" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "Gevolgde Items" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "Item Type" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "Selecteer item type om automatisch toe te wijzen" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "Voorraad prioriteit" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "BOM referentie" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "BOM onderdeel ID" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "BOM onderdeel naam" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "Instaleeren Op" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Bouwen" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Leveranciersonderdeel" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Toegewezen hoeveelheid" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Bouw referentie" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Naam categorie onderdeel" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Volgbaar" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "In productie" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Gepland om te bouwen" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Externe voorraad" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Beschikbare vervanging voorraad" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Beschikbare varianten voorraad" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbruikte hoeveelheid overschrijdt toegewezen hoeveelheid" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Optionele notities voor voorraadverbruik" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "Het bouwelement moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Dupliceer build item allocatie" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "Build line moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Dupliceer build line toewijzing" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Ten minste één item of regel moet worden opgegeven" @@ -1584,7 +1620,7 @@ msgstr "Tags" msgid "Project Code Label" msgstr "Projectcode label" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Bijgewerkt" @@ -1608,9 +1644,9 @@ msgstr "Unieke projectcode" msgid "Project description" msgstr "Projectbeschrijving" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Waarde is niet geldig voor validatiecontrole" msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Gebruiker" msgid "Price break quantity" msgstr "Prijs pauze hoeveelheid" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Prijs" @@ -1679,560 +1715,560 @@ msgstr "Prijs" msgid "Unit price at specified quantity" msgstr "Stukprijs op opgegeven hoeveelheid" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Eindpunt" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Eindpunt waarop deze webhook wordt ontvangen" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Is deze webhook actief" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Sleutel" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Geheim" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Host" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Host waarvan dit bericht is ontvangen" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Koptekst" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Eindpunt waarop dit bericht is ontvangen" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Aan gewerkt" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Is het werk aan dit bericht voltooid?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Titel" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Koppeling" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Gepubliceerd" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Auteur" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Samenvatting" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Gelezen" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Is dit nieuwsitem gelezen?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Afbeelding" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Doel type voor deze afbeelding" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "Doel modelnummer voor deze afbeelding" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Aangepaste eenheid" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Eenheid symbool moet uniek zijn" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Naam van de unit moet een geldig id zijn" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Naam van eenheid" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbool" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Optionele eenheid symbool" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definitie" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definitie van eenheid" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Bijlage" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Ontbrekend bestand" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Externe link ontbreekt" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Model type" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Doel type voor afbeelding" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "Miniatuur" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Opmerking" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Opmerking van bijlage" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Uploaddatum" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Datum waarop het bestand is geüpload" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "Is een afbeelding" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Bestandsgrootte" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Bestandsgrootte in bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Ongeldig modeltype opgegeven voor bijlage" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Aangepaste staat" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Aangepaste statussen" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Referentie status set" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Status set die met deze aangepaste status wordt uitgebreid" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logische sleutel" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Staat logische sleutel die gelijk is aan deze staat in zakelijke logica" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Waarde" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "De numerieke waarde die wordt opgeslagen in de modellendatabase" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Naam van de toestand" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Label dat in de frontend getoond wordt" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Kleur" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Kleur die in de frontend getoond wordt" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Model met deze staat is gekoppeld aan" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Het model moet worden gekozen" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Sleutel moet worden geselecteerd" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Logische sleutel moet worden geselecteerd" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "Sleutel moet anders zijn dan logische sleutel" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Geldige referentie status klasse moet worden opgegeven" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "Sleutel moet verschillen van de logische sleutels van de referentie status" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "Logische sleutel moet in de logische sleutels van de referentiestatus staan" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Naam moet anders zijn dan de namen van de referentie status" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Keuzelijst" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Selectielijst" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Naam van de selectielijst" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Beschrijving van de selectielijst" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Vergrendeld" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Is deze selectielijst vergrendeld?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Kan deze selectielijst worden gebruikt?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Bron plug-in" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Plug-in die de selectielijst biedt" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Bron tekenreeks" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Optionele tekenreeks die de bron identificeert die voor deze lijst wordt gebruikt" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Standaard vermelding" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Standaard vermelding voor deze selectielijst" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Gecreëerd" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Datum en tijd waarop de selectielijst is aangemaakt" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Laatst bijgewerkt" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Datum en tijd waarop de selectielijst voor het laatst is bijgewerkt" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Selectielijst item" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Selectielijst item" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Selectielijst waaraan dit item hoort" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Naam van de selectielijst" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Label voor het item in de selectielijst" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Beschrijving van het item in de selectielijst" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Is dit item in deze lijst actief?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Parameter sjabloon" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Parameter sjablonen" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Keuzes moeten uniek zijn" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Doelmodeltype voor dit parametersjabloon" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Parameternaam" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Eenheden" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Fysieke eenheden voor deze parameter" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Parameter omschrijving" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Selectievakje" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Is deze parameter een selectievak?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Keuzes" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Lijst met selecties voor deze parameter" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Ingeschakeld" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Is dit parametersjabloon ingeschakeld?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Parameter" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Parameters" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Ongeldig modeltype opgegeven voor parameter" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "Model-ID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "ID van het doelmodel voor deze parameter" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Sjabloon" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Parameter sjabloon" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Gegevens" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Parameterwaarde" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Parameterwaarde" msgid "Note" msgstr "Opmerking" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Optioneel notities veld" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Barcode gegevens" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Gebruiker die de barcode gescand heeft" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Tijdstempel" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Datum en tijd van de streepjescode scan" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Adres eindpunt dat de streepjescode verwerkt" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Inhoud" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Contextgegevens voor de barcode scan" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Reactie" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Reactiegegevens van de barcode scan" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Resultaat" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Was de barcode succesvol gescand?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Er is een fout opgetreden" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: E-maillog verwijderen wordt beschermd. Zet INVENTREE_PROTECT_EMAIL_LOG naar False om verwijdering toe te staan." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "E-mailbericht" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "E-mail berichten" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Aangekondigd" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Verzonden" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Mislukt" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Geleverd" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Bevestigd" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Inkomend" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Uitgaand" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Geen antwoord" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Track levering" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Track gelezen" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Track Klik" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "Globaal ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatie voor dit bericht (kan worden geleverd door een extern systeem)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "Discussie ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatie voor deze bericht draad (kan worden geleverd door een extern systeem)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Gesprek" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Gekoppeld onderwerp voor dit bericht" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Prioriteit" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "E-mail gesprekken" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "E-mail gesprekken" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Sleutel" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unieke sleutel voor deze thread (gebruikt om de conversatie te identificeren)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Intern gestart" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Is dit onderwerp intern gestart?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Onderdeel" @@ -2932,7 +2968,7 @@ msgstr "Onderdeel" msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Koopbaar" @@ -2940,7 +2976,7 @@ msgstr "Koopbaar" msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Verkoopbaar" @@ -2952,7 +2988,7 @@ msgstr "Onderdelen kunnen standaard verkocht worden" msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtueel" @@ -4215,8 +4251,8 @@ msgstr "Intern onderdeel is actief" msgid "Supplier is Active" msgstr "Leverancier is actief" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Fabrikant" @@ -4406,7 +4442,7 @@ msgstr "Verzend notities voor intern gebruik" msgid "Link to address information (external)" msgstr "Link naar adres gegevens (extern)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" @@ -4424,8 +4460,8 @@ msgstr "Onderdeel selecteren" msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "Fabrikant artikel nummer" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Leverancier" msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Voorraad beheers eenheid voor leveranciers" @@ -4493,15 +4529,15 @@ msgstr "URL voor link externe leveranciers onderdeel" msgid "Supplier part description" msgstr "Omschrijving leveranciersdeel" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "basisprijs" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Verpakking" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "meerdere" @@ -4542,31 +4578,31 @@ msgstr "Datum van de laatste update van de beschikbaarheid gegevens" msgid "Supplier Price Break" msgstr "Prijsverschil van leverancier" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Bedrijfsnaam" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Op voorraad" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Prijsverschillen" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "Weergavenaam" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Fout opgetreden tijdens data export" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Gegevensexport plug-in geeft onjuiste gegevensindeling terug" @@ -4735,11 +4771,11 @@ msgstr "Rij index" msgid "Original row data" msgstr "Oorspronkelijke rij gegevens" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Fouten" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Geldig" @@ -4899,55 +4935,55 @@ msgstr "Printer locatie" msgid "Scope the printer to a specific location" msgstr "Bereik de printer naar een specifieke locatie" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Naam van de machine" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Machine type" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Type machine" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Stuurprogramma" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Stuurprogramma gebruikt voor de machine" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Machines kunnen worden uitgeschakeld" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Stuurprogramma beschikbaar" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Geen fouten" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Geïnitialiseerd" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Machine status" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Machine" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Machine configuratie" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Configuratie type" @@ -5066,7 +5102,7 @@ msgstr "Bestellen" msgid "Order Complete" msgstr "Bestelling voltooid" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Intern onderdeel" @@ -5124,11 +5160,11 @@ msgstr "Totaalprijs" msgid "Total price for this order" msgstr "Totaalprijs van deze bestelling" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Valuta bestelling" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta voor deze order (laat leeg om de standaard van het bedrijf te gebruiken)" @@ -5168,7 +5204,7 @@ msgstr "Start datum" msgid "Scheduled start date for this order" msgstr "Geplande startdatum voor deze bestelling" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Streefdatum" @@ -5477,8 +5513,8 @@ msgstr "Gecontroleerd door" msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Zending" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "Bestelling ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID van de bestelling om te dupliceren" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Kopieer regels" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Kopieer regelitems uit de oorspronkelijke bestelling" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Extra regels kopiëren" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Extra regelitems van de oorspronkelijke bestelling kopiëren" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Parameters kopiëren" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,288 +5729,276 @@ msgstr "" msgid "Line Items" msgstr "Artikelen" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Afgeronde regel items" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Artikel dupliceren" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Specificeer opties voor het dupliceren van deze bestelling" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Ongeldige order ID" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Leveranciers Naam" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Toestaan order te sluiten met onvolledige regelitems" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Bestelling heeft onvolledige regelitems" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Automatisch prijzen" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Koopprijs automatisch berekenen gebaseerd op leveranciers \n" " onderdelen gegevens" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Items samenvoegen" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Interne naam onderdeel" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Voer batch code in voor inkomende voorraad items" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Vervaldatum" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Voer vervaldatum in voor inkomende voorraad items" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Extra opmerking voor inkomende voorraad items" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Streepjescode" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Gescande streepjescode" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Verzendingen" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "Toegewezen lijnen" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Toegewezen items" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "De volgende serienummers zijn niet beschikbaar" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Retourneer regel item" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Regel item is al ontvangen" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "Artikelen kunnen alleen worden ontvangen tegen lopende bestellingen" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Hoeveelheid te retourneren" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Lijn prijs valuta" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6146,59 +6138,59 @@ msgstr "Heeft revisies" msgid "BOM Valid" msgstr "BOM Valid" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Cascade Categorieën" -#: part/api.py:996 +#: part/api.py:998 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:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filter op numerieke categorie-ID of de letterlijke 'null'" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "Bouw onderdeel is actief" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "Bouw onderdeel is te volgen" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Assemblage deel is testbaar" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "Onderdeel is actief" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "Onderdeel is trackable" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Component onderdeel is testbaar" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "Onderdeel is nog te bouwen" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "Onderdeel is virtueel" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "Heeft beschikbare voorraad" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Gebruik" @@ -6211,7 +6203,7 @@ msgstr "Onderdeel Categorie" msgid "Part Categories" msgstr "Onderdeel Categorieën" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Standaard locatie" @@ -6260,656 +6252,660 @@ msgstr "Standaard waarde" msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Onderdelen" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Kan parameters van een vergrendeld onderdeel niet verwijderen" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Kan de parameters van een vergrendeld onderdeel niet wijzigen" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Kan dit deel niet verwijderen omdat het vergrendeld is" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Kan dit deel niet verwijderen omdat het nog actief is" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Kan dit deel niet verwijderen omdat het in een groep gebruikt is" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "{self}' kan niet worden gebruikt in BOM voor '{parent}' (recursief)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "{parent}' wordt gebruikt in BOM voor '{self}' (recursief)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN moet overeenkomen met regex patroon {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Onderdeel kan geen herziening van zichzelf zijn" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Herzieningen zijn alleen toegestaan voor assemblageonderdelen" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Kan geen revisie maken van een sjabloon onderdeel" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "Bovenliggend onderdeel moet naar dezelfde sjabloon verwijzen" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Voorraadartikel met dit serienummer bestaat al" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Dubbele IPN niet toegestaan in deelinstellingen" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Dubbele onderdeel revisie bestaat al." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Onderdeel met deze naam, IPN en Revisie bestaat al." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Onderdelen kunnen niet worden toegewezen aan categorieën van structurele onderdelen!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Onderdeel naam" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Is een sjabloon" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Is dit deel van een sjabloon?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Is dit een variant van een ander deel?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variant van" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Beschrijving (optioneel)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Sleutelwoorden" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbeteren" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Onderdeel revisie of versienummer" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revisie" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Is dit deel een herziening van een ander deel?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revisie van" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Waar wordt dit item normaal opgeslagen?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Standaard verval datum" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimum voorraad" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimaal toegelaten stock niveau" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Eenheden voor dit onderdeel" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Kan dit onderdeel uit andere delen worden gebouwd?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Kan dit onderdeel gebruikt worden om andere onderdelen te bouwen?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Heeft dit onderdeel een tracking voor unieke items?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Kunnen de testresultaten van dit onderdeel tegen dit onderdeel worden geregistreerd?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Kan dit onderdeel worden gekocht van externe leveranciers?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Kan dit onderdeel aan klanten worden verkocht?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Is dit onderdeel actief?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Vergrendelde onderdelen kunnen niet worden bewerkt" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Is dit een virtueel onderdeel, zoals een softwareproduct of licentie?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "Stuklijst BOM gecontroleerd" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Is de BOM voor dit deel geldig?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "BOM checksum" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Checksum van BOM opgeslagen" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOM gecontroleerd door" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "BOM gecontroleerd datum" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Aanmaken gebruiker" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Eigenaar verantwoordelijk voor dit deel" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Verkopen van meerdere" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Valuta die gebruikt wordt voor de cache berekeningen" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimale BOM kosten" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Minimale kosten van onderdelen" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maximale BOM kosten" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Maximale kosten van onderdelen" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimale aankoop kosten" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Minimale historische aankoop kosten" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maximale aanschaf kosten" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Maximum historische aankoop kosten" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimale interne prijs" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Minimale kosten op basis van interne prijsschommelingen" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maximale interne prijs" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Maximale kosten gebaseerd op interne prijsvoordelen" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Minimale leverancier prijs" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Minimale prijs van onderdeel van externe leveranciers" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Maximale leverancier prijs" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Maximale prijs van onderdeel van externe leveranciers" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Minimale variant kosten" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Berekende minimale kosten van variant onderdelen" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Maximale variant kosten" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Berekende maximale kosten van variant onderdelen" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimale kostprijs" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Overschrijf minimale kosten" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maximale kosten" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Overschrijf maximale kosten" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Berekende minimale kosten" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Berekende totale maximale kosten" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Minimale verkoop prijs" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Minimale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Maximale verkoop prijs" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Maximale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Minimale verkoop prijs" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Minimale historische verkoop prijs" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Maximale verkoop prijs" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Maximale historische verkoop prijs" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Getelde items" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Aantal individuele voorraadvermeldingen op het moment van voorraadcontrole" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Totale voorraad op het moment van voorraadcontrole" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Datum" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Datum waarop voorraad werd uitgevoerd" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Minimale voorraadprijs" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Geschatte minimum kosten van de voorraad op de hand" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maximale voorraadkosten" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Geschatte maximale kosten van de hand van voorraad" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Periodieke verkoopprijs voor onderdelen" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Sjabloon test onderdeel" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ongeldige sjabloonnaam - moet minstens één alfanumeriek teken bevatten" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "Test sjablonen kunnen alleen worden gemaakt voor testbare onderdelen" -#: part/models.py:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Test naam" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Geef een naam op voor de test" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Test sleutel" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Vereenvoudigde sleutel voor de test" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Test beschrijving" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Voer beschrijving in voor deze test" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Is deze test ingeschakeld?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Vereist" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Is deze test nodig om te doorlopen?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Waarde vereist" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Vereist bijlage" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld " -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Selecteer boven liggend onderdeel" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Sub onderdeel" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Selecteer onderdeel dat moet worden gebruikt in BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "BOM hoeveelheid voor dit BOM item" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Dit BOM item is optioneel" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Totale hoeveelheid" -#: part/models.py:4145 +#: part/models.py:4149 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:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Attriatie" -#: part/models.py:4155 +#: part/models.py:4159 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:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Afronden meerdere" -#: part/models.py:4168 +#: part/models.py:4172 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:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Artikelregel referentie" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "BOM item notities" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Controle som" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "BOM lijn controle som" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Goedgekeurd" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Dit BOM item is goedgekeurd" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Wordt overgenomen" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Hoeveelheid moet een geheel getal zijn voor trackable onderdelen" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "BOM Item vervangingen bewerken" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "Vervanging onderdeel kan niet hetzelfde zijn als het hoofddeel" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Bovenliggend BOM item" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Vervanging onderdeel" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Eerste deel" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Tweede deel" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Selecteer gerelateerd onderdeel" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Opmerking voor deze relatie" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Dubbele relatie bestaat al" @@ -6957,331 +6953,319 @@ msgstr "Inkooporder voor dit voorraadartikel" msgid "File is not an image" msgstr "Bestand is geen afbeelding" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Oorspronkelijk onderdeel" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Selecteer origineel onderdeel om te dupliceren" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Afbeelding kopiëren" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Copy BOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Kopieer materiaal van het oorspronkelijke deel" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Parameter data kopiëren van het originele onderdeel" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Notities kopiëren" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Kopieer notities van het originele deel" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Tests kopiëren" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Test sjablonen kopiëren van het originele deel" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Eerste voorraad hoeveelheid" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Eerste voorraad locatie" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Fabrikant artikel nummer" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Geselecteerde onderneming is geen geldige leverancier" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Geselecteerde bedrijf is geen geldige fabrikant" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Categorie naam" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Bouwen" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Hoeveelheid van dit deel dat momenteel in productie is" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Er zal een onuitputtelijke hoeveelheid van dit deel worden gebouwd" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Voorraadartikelen" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Revisies" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Totale Voorraad" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Niet toegewezen voorraad" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Variant voorraad" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Dupliceer onderdeel" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Kopieer eerste gegevens uit een ander onderdeel" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Afbeelding kopiëren" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Copy BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Kopieer materiaal van het oorspronkelijke deel" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Notities kopiëren" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Kopieer notities van het originele deel" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Tests kopiëren" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Test sjablonen kopiëren van het originele deel" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Eerste voorraad" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Maak onderdeel met eerste voorraad" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Leveranciersgegevens" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Categorie parameters kopiëren" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Bestaande afbeelding" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Bestandsnaam van een bestaande onderdeel afbeelding" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Afbeeldingsbestand bestaat niet" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Valideer de gehele materiaalbon" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Kan bouwen" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Vereist voor bouworders" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Toegewezen aan bouwen van orders" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Vereist voor verkooporders" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "IPN onderdeel" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "Onderdeel omschrijving" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "Rapport Maken" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Minimale prijs" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Overschrijf berekende waarde voor minimale prijs" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Minimale prijs valuta" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Maximale prijs" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Overschrijf de berekende waarde voor de maximale prijs" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Maximale prijs valuta" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Bijwerken" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Prijzen voor dit onderdeel bijwerken" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Selecteer de bovenliggende assemblage" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Selecteer het onderdeel" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Selecteer onderdeel om BOM van te kopiëren" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Bestaande gegevens verwijderen" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Verwijder bestaande BOM items voor het kopiëren" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Inclusief overgenomen" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Ongeldige regels overslaan" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Schakel deze optie in om ongeldige rijen over te slaan" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Verwijder vervangend deel" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items" @@ -7598,7 +7582,7 @@ msgid "Provides native support for barcodes" msgstr "Biedt ondersteuning voor barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7642,11 +7626,11 @@ msgstr "Korte barcode voorvoegsel" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Aanpassen van prefix voor korte streepjescodes, kan handig zijn voor omgevingen met meerdere InvenTree instanties" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Automatisch builds aanmaken" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Automatisch bouworders voor assemblages aanmaken" @@ -9454,8 +9438,8 @@ msgstr "Geen voorraad item opgegeven" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Locatie van bestemming" @@ -9627,7 +9611,7 @@ msgstr "Voorraad artikel is al in voorraad" msgid "Quantity must not be negative" msgstr "Hoeveelheid mag niet negatief zijn" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "Samenvoegen in bestaande voorraad" @@ -9643,15 +9627,20 @@ msgstr "Voorraad transactie notities" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "Voeg indien mogelijk geretourneerde items samen in bestaande voorraad" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Volgend serienummer" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Vorig serienummer" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index e1d3bfbbdc..2413c4dd66 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -89,7 +89,7 @@ msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" @@ -97,16 +97,16 @@ msgstr "Ugyldig mengde oppgitt" msgid "Error details can be found in the admin panel" msgstr "Feildetaljer kan finnes i admin-panelet" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Oppgi dato" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referansenummeret er for stort" msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Beskrivelse" msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Sti" @@ -334,7 +334,7 @@ msgstr "Serverfeil" msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Bilde" msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Kopier parametere" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabisk" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Ordrestatus" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Overordnet produksjon" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategori" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Sammenstilling" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Spores" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "I bestilling" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produksjonsordre" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Plassering" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Produksjonsordrer" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Sammenstillings-BOMen er ikke godkjent" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Produksjonsordre kan ikke opprettes for en inaktiv del" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Produksjonsordre kan ikke opprettes for en ulåst del" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Ansvarlig bruker eller gruppe må spesifiseres" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Produksjonsordrens del kan ikke endres" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Produksjonsordre-referanse" msgid "Reference" msgstr "Referanse" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Kort beskrivelse av produksjonen (valgfritt)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Velg del å produsere" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Salgsordrereferanse" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Kildeplassering" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Velg plassering å ta lagerbeholdning fra for denne produksjonen (la stå tomt for a ta fra alle lagerplasseringer)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Fullført plassering" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Velg plassering der fullførte artikler vil bli lagret" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Produksjonsmengde" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Antall lagervarer å produsere" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Fullførte artikler" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Antall lagervarer som er fullført" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Produksjonsstatus" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Opprettelsesdato" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Forventet sluttdato" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldato for ferdigstillelse. Produksjonen vil være forfalt etter denne datoen." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Fullført dato" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "fullført av" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Utstedt av" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Lenke til ekstern URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Produksjonsprioritet" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Prosjektkode" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienumre må angis for sporbare deler" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Produksjonsartikkel" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Produksjonsobjekt" msgid "Quantity" msgstr "Antall" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Monteres i" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Lagervare for montering" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Delnavn" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Lagerplassering for produksjonsartikkel" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Bruk tildelt lagerbeholdning" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "BOM-referanse" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Leverandørdel" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Tildelt antall" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Produksjonsreferanse" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Delkategorinavn" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Sporbar" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Ekstern lagerbeholdning" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Tilgjengelige erstatningsvarer" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Tilgjengelige variantvarer" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Etikett for prosjektkode" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Oppdatert" @@ -1608,9 +1644,9 @@ msgstr "Unik prosjektkode" msgid "Project description" msgstr "Prosjektbeskrivelse" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Bruker" msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Pris" @@ -1679,560 +1715,560 @@ msgstr "Pris" msgid "Unit price at specified quantity" msgstr "Enhetspris på spesifisert antall" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Endepunkt" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Endepunktet hvor denne webhooken er mottatt" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Er webhooken aktiv" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Sjetong" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Vert" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Verten denne meldingen ble mottatt fra" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Tittel" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Brødtekst" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Innholdet i meldingen" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Endepunktet meldingen ble mottatt fra" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Tittel" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lenke" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publisert" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Forfatter" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Sammendrag" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Les" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Er dette nyhetselementet lest?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Bildefil" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Enhetssymbolet må være unikt" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Enhetsnavn må være en gyldig identifikator" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Enhetsnavn" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Valgfritt enhetssymbol" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definisjon" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Enhetsdefinisjon" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Vedlegg" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Fil mangler" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Mangler eksternlenke" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Velg fil å legge ved" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Vedleggskommentar" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Opplastet dato" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Datoen som filen ble lastet opp" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Filstørrelse" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Filstørrelse i byte" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Ugyldig modelltype spesifisert for vedlegg" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Verdi" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Opprettet" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Sist oppdatert" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Parametermal" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Valg må være unike" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Parameternavn" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Enheter" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Sjekkboks" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Valg" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Aktivert" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Mal" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Parameterverdi" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Parameterverdi" msgid "Note" msgstr "Notat" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Resultat" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Nøkkel" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponent" @@ -2932,7 +2968,7 @@ msgstr "Komponent" msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Kjøpbar" @@ -2940,7 +2976,7 @@ msgstr "Kjøpbar" msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Salgbar" @@ -2952,7 +2988,7 @@ msgstr "Deler er salgbare som standard" msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuelle" @@ -4215,8 +4251,8 @@ msgstr "Intern del er aktiv" msgid "Supplier is Active" msgstr "Leverandør er aktiv" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Produsent" @@ -4406,7 +4442,7 @@ msgstr "Fraktnotater for internt bruk" msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Produsentdeler" @@ -4424,8 +4460,8 @@ msgstr "Velg del" msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Leverandør" msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" @@ -4493,15 +4529,15 @@ msgstr "URL for ekstern leverandørdel-lenke" msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Emballasje" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "flere" @@ -4542,31 +4578,31 @@ msgstr "Dato for siste oppdatering av tilgjengelighetsdata" msgid "Supplier Price Break" msgstr "Leverandørens prisbrudd" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Standardvaluta brukt for denne leverandøren" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Bedriftsnavn" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "På lager" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Gyldig" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "Ordre" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Intern del" @@ -5124,11 +5160,11 @@ msgstr "Total pris" msgid "Total price for this order" msgstr "Total pris for denne ordren" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Ordrevaluta" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldato" @@ -5477,8 +5513,8 @@ msgstr "Sjekket Av" msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Forsendelse" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Kopier parametere" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Linjeelementer" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Leverandørnavn" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Internt delnummer" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Utløpsdato" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Valuta for linje" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "Delkategori" msgid "Part Categories" msgstr "Delkategorier" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Standard plassering" @@ -6259,656 +6251,660 @@ msgstr "Standardverdi" msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Deler" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Delen '{self}' kan ikke brukes i BOM for '{parent}' (rekursiv)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Delen '{parent}' er brukt i BOM for '{self}' (rekursiv)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN må samsvare med regex-mønsteret {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Lagervare med dette serienummeret eksisterer allerede" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplikat av internt delnummer er ikke tillatt i delinnstillinger" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Del med dette Navnet, internt delnummer og Revisjon eksisterer allerede." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Deler kan ikke tilordnes strukturelle delkategorier!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Delnavn" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Er Mal" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Er delen en maldel?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Er delen en variant av en annen del?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Delbeskrivelse (valgfritt)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Nøkkelord" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revisjon" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Hvor er denne artikkelen vanligvis lagret?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Standard utløp" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimum tillatt lagernivå" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Måleenheter for denne delen" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Kan denne delen bygges fra andre deler?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Kan denne delen brukes til å bygge andre deler?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Har denne delen sporing av unike artikler?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Kan denne delen kjøpes inn fra eksterne leverandører?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Kan denne delen selges til kunder?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Er denne delen aktiv?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Er dette en virtuell del, som et softwareprodukt eller en lisens?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "Kontrollsum for BOM" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Lagret BOM-kontrollsum" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Stykkliste sjekket av" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Stykkliste sjekket dato" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Opprettingsbruker" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Antall" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Dato" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" @@ -6956,331 +6952,319 @@ msgstr "Innkjøpsvaluta for lagervaren" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Original Del" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Velg original del å duplisere" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kopier Bilde" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Kopier bilde fra originaldel" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Kopier Stykkliste" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Kopier stykkliste fra original del" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Kopier parameterdata fra originaldel" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Kopier notater" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Kopier notater fra originaldel" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Kategorinavn" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Produseres" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Lagervarer" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Total lagerbeholdning" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kopier Bilde" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Kopier bilde fra originaldel" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Kopier Stykkliste" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Kopier stykkliste fra original del" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Kopier notater" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Kopier notater fra originaldel" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Kan Produsere" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Minstepris" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Makspris" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Gir innebygd støtte for strekkoder" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Til Lagerplassering" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Lager transaksjonsnotater" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index bbc43f78f6..02e76088fd 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -89,7 +89,7 @@ msgstr "Nie udało się przeliczyć {original} na {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" @@ -97,16 +97,16 @@ msgstr "Podano nieprawidłową ilość" msgid "Error details can be found in the admin panel" msgstr "Szczegóły błędu można znaleźć w panelu administracyjnym" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Wprowadź dane" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Niepoprawna wartość dziesiętna" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Numer odniesienia jest zbyt duży" msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Ścieżka" @@ -334,7 +334,7 @@ msgstr "Błąd serwera" msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Obraz" msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Kopiuj parametry" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabski" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Status zamówienia" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Obejmuje warianty" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Obejmuje warianty" msgid "Part" msgstr "Komponent" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategoria" @@ -661,125 +701,126 @@ msgstr "Wyklucz drzewo" msgid "Build must be cancelled before it can be deleted" msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Złożenie" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Śledzony" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testowalne" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Zaległe zamówienie" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "W Zamówieniu" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Lokalizacja" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Wyjście" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Zbiór BOM nie został zatwierdzony" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Zlecenie budowy nie może być utworzone dla nieaktywnej części" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Zlecenie budowy nie może zostać utworzone dla odblokowanej części" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Odpowiedzialny użytkownik lub grupa muszą być określone" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Nie można zmienić elementu kompletacji" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Data docelowa musi być po dacie rozpoczęcia" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Odwołanie do zamówienia wykonania" msgid "Reference" msgstr "Referencja" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Krótki opis produkcji (opcjonalny)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Wybierz lokalizację, z której pobrać element do budowy (pozostaw puste, aby wziąć z dowolnej lokalizacji)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Budowa zewnętrzna" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Wybierz lokalizację, w której będą przechowywane ukończone elementy" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Data rozpoczęcia budowy" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Zaplanowana data rozpoczęcia dla tego zamówienia budowy" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Docelowa data zakończenia kompilacji. Po tej dacie kompilacja będzie zaległa." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Priorytet budowy" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Kod projektu" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Należy podać numery seryjne dla lokalizowania części" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Zbuduj obiekt" msgid "Quantity" msgstr "Ilość" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Poziom budowania" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Nazwa komponentu" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Zaakceptuj nieprzydzielone" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostępna ilość ({q}) przekroczona" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Magazyn wymienny" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Przydziel opcjonalne elementy BOM do zbudowania zamówienia" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Odniesienie BOM" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID części BOM" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Nazwa części BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Wersja" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Część dostawcy" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Ilość zarezerwowana" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Możliwość śledzenia" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Zew. zasoby magazynowe" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Dostępny magazyn zastępczy" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Zaktualizowany" @@ -1608,9 +1644,9 @@ msgstr "Unikalny kod projektu" msgid "Project description" msgstr "Opis projektu" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Wartość nie zgadza się z kontrolą poprawności" msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Użytkownik" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Cena" @@ -1679,560 +1715,560 @@ msgstr "Cena" msgid "Unit price at specified quantity" msgstr "Cena jednostkowa po określonej ilości" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token dostępu" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Sekret" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Host" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Nagłówek" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Zawartość" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Treść tej wiadomości" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Opracowany na" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Czy prace nad tą wiadomością zostały zakończone?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Tytuł" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Łącze" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Opublikowano" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Podsumowanie" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Czytaj" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Czy ta wiadomość była przeczytana?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Plik obrazu" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Jednostka Niestandardowa" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Symbol jednostki musi być unikalny" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Nazwa jednostki musi być prawidłowym identyfikatorem" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Nazwa jednostki" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Opcjonalny symbol jednostki" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definicja" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definicja jednostki" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Załącznik" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Brak pliku" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Docelowy typ modelu dla obrazu" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Wybierz plik do załączenia" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Komentarz" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Komentarz do załącznika" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Data dodania" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Data przesłania pliku" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Rozmiar pliku" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Rozmiar pliku w bajtach" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Wartość" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etykieta" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Kolor" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Model musi być wybrany" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Klucz musi być wybrany" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Zablokowany" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Utworzony" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Ostatnia aktualizacja" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Jednostki" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Aktywne" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Szablon" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Dane" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Wartość parametru" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Wartość parametru" msgid "Note" msgstr "Uwaga" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Wynik" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Doręczono" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Klucz" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponent" @@ -2932,7 +2968,7 @@ msgstr "Komponent" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Możliwość zakupu" @@ -2940,7 +2976,7 @@ msgstr "Możliwość zakupu" msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Możliwość sprzedaży" @@ -2952,7 +2988,7 @@ msgstr "Części są domyślnie z możliwością sprzedaży" msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Wirtualny" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Producent" @@ -4406,7 +4442,7 @@ msgstr "Notatki wysyłkowe do użytku wewnętrznego" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Komponent producenta" @@ -4424,8 +4460,8 @@ msgstr "Wybierz część" msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Dostawca" msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Opakowanie" @@ -4518,7 +4554,7 @@ msgstr "Ilość w opakowaniu" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "wielokrotność" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Domyślna waluta używana dla tego dostawcy" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Na stanie" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Ważny" @@ -4899,55 +4935,55 @@ msgstr "Lokalizacja drukarki" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Nazwa maszyny" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Typ maszyny" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Typ maszyny" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Sterownik" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Sterownik użyty dla tego urządzenia" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Brak błędów" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Zainicjalizowany" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "Zamówienie" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Komponent wewnętrzny" @@ -5124,11 +5160,11 @@ msgstr "Cena całkowita" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data docelowa" @@ -5477,8 +5513,8 @@ msgstr "Sprawdzone przez" msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Przesyłka" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Kopiuj parametry" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Data ważności" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "Kategoria komponentu" msgid "Part Categories" msgstr "Kategorie części" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Domyślna lokalizacja" @@ -6259,656 +6251,660 @@ msgstr "Wartość domyślna" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Części" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Wariant" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Słowa kluczowe" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Wersja" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Czy ta część może być użyta do budowy innych części?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Czy to wirtualna część, taka jak oprogramowanie lub licencja?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Data" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Wymagane" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "Waluta zakupu tego towaru" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kopiuj obraz" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Kopiuj BOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Towary" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kopiuj obraz" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Kopiuj BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 89eee00980..91c9d539fe 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -89,7 +89,7 @@ msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Quantidade fornecida inválida" @@ -97,16 +97,16 @@ msgstr "Quantidade fornecida inválida" msgid "Error details can be found in the admin panel" msgstr "Detalhes do erro podem ser encontrados no painel de administrador" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Insira uma Data" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "O número de referência é muito grande" msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Descrição" msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Caminho" @@ -334,7 +334,7 @@ msgstr "Erro de servidor" msgid "An error has been logged by the server." msgstr "Log de erro salvo pelo servidor." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Imagem" msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Selecione a Moeda nas opções disponíveis" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Copiar Parâmetros" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Não é um código de moeda válido" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Situação do pedido" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Produção Progenitor" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Peça" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Categoria" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Consumível" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opcional" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Montagem" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Monitorado" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Alocado" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "No pedido" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 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:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Local" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Ordens de Produções" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Usuário ou grupo responsável deve ser especificado" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Peça da ordem de produção não pode ser alterada" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Referência do pedido de produção" msgid "Reference" msgstr "Referência" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Breve descrição da produção (opcional)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Selecionar peça para produção" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referência do pedido de venda" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Local de Origem" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecione a localização para pegar do estoque para esta produção (deixe em branco para tirar a partir de qualquer local de estoque)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Local de Destino" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Selecione o local onde os itens concluídos serão armazenados" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Quantidade de Produção" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Número de itens em estoque para produzir" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Itens concluídos" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Número de itens em estoque concluídos" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Progresso da produção" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Código de Lote" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 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:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Criado em" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Data alvo final" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data alvo para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Data de conclusão" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "Concluído por" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Usuário que emitiu este pedido de produção" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" -#: build/models.py:420 +#: build/models.py:417 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:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Link Externo" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Prioridade de Produção" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioridade deste pedido de produção" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Código do projeto" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Código do projeto para este pedido de produção" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Saída de produção já completada" -#: build/models.py:961 +#: build/models.py:958 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:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Item da linha de Produção" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Objeto de produção" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Objeto de produção" msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Item estoque selecionado não coincide com linha da LDM" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Item de estoque" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Destino do Item do Estoque" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:233 +#: build/serializers.py:256 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:237 +#: build/serializers.py:260 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:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "A saída de produção não está completamente alocada" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Entre a quantidade da saída de produção" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Local de estoque para a produção" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas recicladas" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas sucateadas" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Motivo para sucatear saída(s) de produção" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:643 +#: build/serializers.py:656 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:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar este pedido de produção" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Estoque sobrealocado" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrealocados" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Linha de produção" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Item deve estar em estoque" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Alocação do Item precisa ser fornecida" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Local não incluso" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Não incluir itens de estoque deste local" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Estoque permutável" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Substituir Estoque" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens LDM opcionais para o pedido de produção" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Atualizado" @@ -1608,9 +1644,9 @@ msgstr "Código único do projeto" msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Usuario" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Preço" @@ -1679,560 +1715,560 @@ msgstr "Preço" msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o gancho web foi recebido" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Este gancho web está ativo" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token de acesso" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Segredo" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Servidor" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Corpo" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Título" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ligação" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publicado" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Resumo" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Lida" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Esta notícia do item foi lida?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definição" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Anexo" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Comentario" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Valor" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Criado" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Última atualização" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Modelo de parâmetro" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Parâmetros da caixa de seleção não podem ter unidades" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Escolhas devem ser únicas" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Nome do modelo de parâmetro deve ser único" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Unidades" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Unidades físicas para este parâmetro" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Descrição do Parâmetro" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Escolhas" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Modelo" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Dados" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Valor do Parâmetro" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Valor do Parâmetro" msgid "Note" msgstr "Anotação" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Resultado" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Chave" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Componente" @@ -2932,7 +2968,7 @@ msgstr "Componente" msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Comprável" @@ -2940,7 +2976,7 @@ msgstr "Comprável" msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Vendível" @@ -2952,7 +2988,7 @@ msgstr "Peças vão vendíveis por padrão" msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtual" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Fabricante" @@ -4406,7 +4442,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Peça do Fabricante" @@ -4424,8 +4460,8 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "NPF" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4493,15 +4529,15 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "preço base" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Embalagem" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "múltiplo" @@ -4542,31 +4578,31 @@ msgstr "Data da última atualização da disponibilidade dos dados" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Moeda padrão utilizada para este fornecedor" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Válido" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "Pedido" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Peça Interna" @@ -5124,11 +5160,11 @@ msgstr "Preço Total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Moeda do pedido" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data alvo" @@ -5477,8 +5513,8 @@ msgstr "Verificado por" msgid "User who checked this shipment" msgstr "Usuário que verificou esta remessa" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Remessa" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Quantidade deve ser 1 para item de estoque serializado" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Copiar Parâmetros" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Itens de linha" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Nome do Fornecedor" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "O pedido tem itens da linha incompletos" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Moeda de preço de compra" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Numero interno do produto" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Itens de linha" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Selecione o local de destino para os itens recebidos" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Digite o código do lote para itens de estoque recebidos" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Data de validade" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Digite o número de série para itens de estoque recebidos" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Código de barras já em uso" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Envios concluídos" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Moeda de preço de venda" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Item de linha não está associado a este pedido" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Digite números de série para alocar" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "O pedido já foi enviado" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "O envio não está associado a este pedido" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 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:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Devolver item do pedido" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Item do pedido não bate com o pedido de devolução" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Item do pedido já foi recebido" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Tipo de moeda para o item do pedido" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "Categoria da Peça" msgid "Part Categories" msgstr "Categorias de Peça" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Local Padrão" @@ -6259,656 +6251,660 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Peças" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Peça '{self}' não pode ser utilizada na BOM para '{parent}' (recursiva)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Peça '{parent}' é usada na BOM para '{self}' (recursiva)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN deve corresponder ao padrão regex {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Item em estoque com este número de série já existe" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Não é permitido duplicar IPN em configurações de partes" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Uma parte com este Nome, IPN e Revisão já existe." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Peças não podem ser atribuídas a categorias estruturais!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Esta peça é uma peça modelo?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Esta peça é variante de outra peça?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Palavras chave" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisão de peça ou número de versão" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revisão" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Onde este item é armazenado normalmente?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Validade Padrão" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Estoque Mínimo" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Nível mínimo de estoque permitido" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Unidade de medida para esta peça" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Essa peça pode ser construída a partir de outras peças?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Essa peça pode ser usada para construir outras peças?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Esta parte tem rastreamento para itens únicos?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Esta peça pode ser comprada de fornecedores externos?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Esta peça pode ser vendida a clientes?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Esta parte está ativa?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Esta é uma peça virtual, como um software de produto ou licença?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "Soma de Verificação da LDM" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Soma de verificação da LDM armazenada" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "LDM conferida por" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "LDM verificada no dia" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Criação de Usuário" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Proprietário responsável por esta peça" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Venda múltipla" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Moeda usada para armazenar os cálculos de preços" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Custo Mínimo da LDM" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Custo mínimo das peças componentes" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Custo Máximo da LDM" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Custo máximo das peças componentes" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Custo Mínimo de Compra" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Custo mínimo histórico de compra" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Custo Máximo de Compra" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Custo máximo histórico de compra" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Preço Interno Mínimo" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Custo mínimo baseado nos intervalos de preço internos" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Preço Interno Máximo" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Custo máximo baseado nos intervalos de preço internos" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Preço Mínimo do Fornecedor" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Preço Máximo do Fornecedor" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Custo Mínimo variável" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Custo mínimo calculado das peças variáveis" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Custo Máximo Variável" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Custo máximo calculado das peças variáveis" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Custo Mínimo" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Sobrepor o custo mínimo" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Custo Máximo" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Sobrepor o custo máximo" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Custo total mínimo calculado" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Custo total máximo calculado" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Preço Mínimo de Venda" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Preço mínimo de venda baseado nos intervalos de preço" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Preço Máximo de Venda" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Preço máximo de venda baseado nos intervalos de preço" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Custo Mínimo de Venda" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Preço histórico mínimo de venda" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Custo Máximo de Venda" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Preço histórico máximo de venda" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Peça para Balanço" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Total de Itens" -#: part/models.py:3536 +#: part/models.py:3540 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:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Estoque total disponível no momento do balanço" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Data" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Data de realização do balanço" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Custo Mínimo de Estoque" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Custo mínimo estimado de estoque disponível" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Custo Máximo de Estoque" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Custo máximo estimado de estoque disponível" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Nome de Teste" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Insira um nome para o teste" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Descrição do Teste" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Digite a descrição para este teste" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Requerido" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Este teste é obrigatório passar?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Requer Valor" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Anexo obrigatório" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Selecione a Peça Parental" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Selecionar peça a ser usada na LDM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Quantidade de LDM para este item LDM" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Este item LDM é opcional" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Referência do Item LDM" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Notas do Item LDM" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Soma de verificação" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Soma de Verificação da LDM da linha" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Validado" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "O item da LDM foi validado" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Obtém herdados" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Sub peça deve ser especificada" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Substituir Item da LDM" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Item LDM Parental" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Substituir peça" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Selecionar Peça Relacionada" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" @@ -6956,331 +6952,319 @@ msgstr "Moeda de compra deste item de estoque" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Peça Original" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Selecione a peça original para duplicar" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Copiar imagem" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Copiar imagem da peça original" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Copiar LDM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Copiar lista de materiais da peça original" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Copiar dados do parâmetro da peça original" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Copiar Notas" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Copiar imagem da peça original" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Nome da Categoria" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Produzindo" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Copiar imagem" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Copiar imagem da peça original" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Copiar LDM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Copiar lista de materiais da peça original" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Copiar Notas" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Copiar imagem da peça original" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:1036 +#: part/serializers.py:1003 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:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Validar a Lista de Materiais completa" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Pode Produzir" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Preço Máximo" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 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:1594 +#: part/serializers.py:1561 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:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Fornece suporte nativo para códigos de barras" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" 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:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Local de destino do estoque" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Notas da transação de estoque" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index 9005274351..7fe7778122 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -89,7 +89,7 @@ msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Quantidade inválida" @@ -97,16 +97,16 @@ msgstr "Quantidade inválida" msgid "Error details can be found in the admin panel" msgstr "Detalhes do erro podem ser encontrados no painel de administração" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Informe a data" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Valor decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "O número de referência é muito longo" msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Descrição" msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Caminho" @@ -334,7 +334,7 @@ msgstr "Erro de servidor" msgid "An error has been logged by the server." msgstr "Um erro foi registrado pelo servidor." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Imagem" msgid "Must be a valid number" msgstr "Deve ser um número válido" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Selecione a moeda entre as opções disponíveis" @@ -373,6 +373,46 @@ msgstr "Tipo de conteúdo não encontrado" msgid "Content type does not match required mixin class" msgstr "O tipo de conteúdo não corresponde à classe mixin exigida" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Copiar parâmetros" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "Copiar parâmetros do item original" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Copiar linhas" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Copiar itens de linha do pedido original" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Copiar linhas extras" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Copiar itens de linha extras do pedido original" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "Opções de duplicação" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "Especifique as opções para duplicar este item" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "Original" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "Selecione a instância para duplicar" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Árabe" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "O código de moeda não é válido" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Status de pedido" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Produção principal" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Incluir variáveis" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Incluir variáveis" msgid "Part" msgstr "Peça" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Categoria" @@ -661,125 +701,126 @@ msgstr "Excluir árvore" msgid "Build must be cancelled before it can be deleted" msgstr "A produção deve ser cancelada antes de ser excluída" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Consumível" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opcional" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Montagem" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testável" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Pedido pendente" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Alocado" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Consumido" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Em pedido" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "Produção não encontrada" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Pedido de produção" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Local" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Saída" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrar por ID do item de estoque de saída. Use 'null' para encontrar itens de produção não instalados." -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Pedidos de produção" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "O BOM da montagem não foi validado" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Pedido de produção não pode ser criada para uma peça inativa" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Pedido de produção não pode ser criado para uma peça desbloqueada" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Criar ordens só pode ser realizado externamente para peças compráveis" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Usuário ou grupo responsável deve ser especificado" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Peça do pedido de produção não pode ser alterada" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "A data limite deve ser posterior à data inicial" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Referência do pedido de produção" msgid "Reference" msgstr "Referência" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Breve descrição da produção (opcional)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Pedido de produção ao qual esta produção está alocada" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Selecione a peça para construir" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referência do pedido de venda" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "Pedido de venda ao qual esta produção está alocada" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Local de origem" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecione o local para fazer estoque para esta produção (deixe em branco para tirar a partir de qualquer local de estoque)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Produção externa" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Este pedido de produção é atendido externamente" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Local de destino" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Selecione o local onde os itens concluídos serão armazenados" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Quantidade de produção" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Número de itens em estoque para produzir" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Itens concluídos" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Número de itens em estoque concluídos" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Status da produção" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Código do lote" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 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:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Criado em" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Data inicial da produção" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Data de início agendada para este pedido de produção" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Data alvo final" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data limite para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Data de conclusão" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "Concluído por" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Usuário que emitiu este pedido de produção" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" -#: build/models.py:420 +#: build/models.py:417 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:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Link externo" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Prioridade de produção" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioridade deste pedido de produção" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Código do projeto" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Código do projeto para este pedido de produção" -#: build/models.py:696 +#: build/models.py:693 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:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Não é possível concluir o pedido com saídas incompletas" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Saída da produção já está concluída" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde à pedido de produção" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 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:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "Os itens de estoque alocados ainda estão em produção" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "Não é possível concluir parcialmente uma saída de produção com itens alocados" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Item de linha do pedido de produção" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Compilar objeto" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Compilar objeto" msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Quantidade de estoque consumido" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 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:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "A quantidade alocada deve ser maior que zero" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "O item de estoque está superalocado" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Item de estoque" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Destino do item do estoque" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Nível de produção" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Nome da peça" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Saída da produção" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção principal" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça do pedido de produção" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Esta saída de produção não está totalmente alocada" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Insira a quantidade para construir a saída de produção" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Números de série" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Local de estoque para saídas de produção" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Alocar números de série automaticamente" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas eliminadas" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas eliminadas" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Motivo para eliminar saída(s) de produção" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Aceitar alocação incompleta" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Consumir estoque alocado" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Remover saídas incompletas" -#: build/serializers.py:643 +#: build/serializers.py:656 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:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por este pedido de produção" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar este pedido de produção" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Estoque superalocado" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrecarregados" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Aceitar incompleto" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "A pedido de produção tem pedidos de produção secundárias abertas" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Pedido de produção deve estar no estado de produção" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Linha de produção" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Saída da produção" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "Bom_item.part deve apontar para a mesma peça que a pedido de produção" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "O item deve estar em estoque" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Alocação de itens precisam ser fornecidos" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Excluir local" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Excluir itens de estoque desta localização selecionada" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Estoque intercambiável" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Estoque substituto" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens BOM opcionais para pedido de produção" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "Todos os itens" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "Itens não rastreados" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "Itens rastreados" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "Tipo de item" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "Selecionar o tipo de item para alocar automaticamente" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "Prioridade de estoque" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "Ordem preferencial em que os itens de estoque correspondentes são consumidos" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "Linhas de produção" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "Limitar a alocação a estas linhas de produção (deixe em branco para alocar todas as linhas)" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Referência do BOM" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID da peça BOM" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Nome da peça BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "Instalar em" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Produção" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Fornecedor da peça" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Quantidade alocada" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Referência da produção" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Nome da categoria" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Item BOM" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Em produção" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Agendado para produção" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Estoque externo" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Estoque disponível" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Estoque substituto disponível" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Estoque de variantes disponível" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "A quantidade consumida excede a quantidade alocada" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Notas opcionais para o consumo de estoque" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "O item de produção deve apontar para o pedido de produção correto" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Alocação de item de produção duplicada" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "A linha de produção deve apontar para o pedido de produção correto" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Alocação de linha de produção duplicada" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Pelo menos um item ou uma linha deve ser fornecido" @@ -1584,7 +1620,7 @@ msgstr "Marcadores" msgid "Project Code Label" msgstr "Rótulo de código do projeto" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Atualizado" @@ -1608,9 +1644,9 @@ msgstr "Código único do projeto" msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "O valor não passa em verificações de validação" msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Usuário" msgid "Price break quantity" msgstr "Quantidade de parcelamentos" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Preço" @@ -1679,560 +1715,560 @@ msgstr "Preço" msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o webhook foi recebido" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Este webhook está ativo" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Ficha" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Ficha para acesso" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Secreto" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID da mensagem" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Servidor" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Corpo" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Título" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publicado" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Resumo" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Lida" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Este item de notícia foi lido?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "ID do modelo de destino para esta imagem" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Unidade personalizada" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "O símbolo da unidade deve ser único" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definição" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Anexo" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "Nenhum arquivo anexado para renomear" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "O nome do arquivo não pode estar vazio" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "Nome de arquivo inválido" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "Não é possível alterar a extensão do arquivo" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "Já existe um arquivo com este nome" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "Falha ao salvar o arquivo renomeado" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Categoria de modelo" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "Miniatura" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "Imagem em miniatura para este anexo" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Comentário" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Comentário de anexo" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Data de envio" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Data em que o arquivo foi enviado" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "É imagem" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "Verdadeiro se este anexo for um arquivo de imagem válido" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Tamanho do arquivo" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Tamanho do arquivo em bytes" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Categoria de modelo especificado inválido para anexo" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Status referência definido" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Conjunto de status estendido com este status personalizado" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chave lógica" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Chave lógica de estado que é igual a este estado personalizado na lógica de negócios" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Valor" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Valor numérico que será salvo no banco de dados dos modelos" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Nome do estado" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que será exibida no frontend" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Cor" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Cor que será exibida no frontend" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Modelo" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Modelo que este estado está associado a" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Modelo deve ser selecionado" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "A chave deve ser selecionada" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Chave lógica deve ser selecionada" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "A chave deve diferir da chave lógica" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Uma classe de estado de referência válida deve ser fornecida" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "A chave deve diferir das chaves lógicas do estado de referência" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "A chave lógica deve estar nas chaves lógicas do estado de referência" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "O nome deve diferir dos nomes do estado de referência" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Lista de seleção" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Listas de seleção" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Nome da lista de seleção" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Descrição da lista de seleção" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Esta lista de seleção está bloqueada?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Esta lista de seleção pode ser usada?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Extensão de origem" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Extensão que fornece a lista de seleção" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Série de origem" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Série opcional identificando a fonte usada para esta lista" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Entrada padrão" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Entrada padrão para esta lista de seleção" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Criado em" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Data/hora em que a lista de seleção foi criada" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Última atualização" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Data/hora da última atualização da lista de seleção" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Entrada na lista de seleção" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Entradas na lista de seleção" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Lista de seleção à qual esta entrada pertence" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Valor da entrada da lista de seleção" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Rótulo para a entrada da lista de seleção" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Descrição da entrada da lista de seleção" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Esta entrada da lista de seleção está ativa?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Modelo de parâmetro" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Modelos de parâmetro" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Parâmetros de caixa de seleção não podem ter unidades" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Parâmetros de caixa de seleção não podem ter opções" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "As opções devem ser únicas" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "O nome do modelo de parâmetro deve ser único" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Tipo de modelo de destino para este modelo de parâmetro" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Nome do parâmetro" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Unidades" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Unidades físicas para este parâmetro" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Descrição do parâmetro" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Opções" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opções válidas para este parâmetro (separadas por vírgula)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Lista de seleção para este parâmetro" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Este modelo de parâmetro está habilitado?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Parâmetro" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Parâmetros" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Opção inválida para o valor do parâmetro" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Tipo de modelo inválido especificado para o parâmetro" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "ID do modelo" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "ID do modelo de destino para este parâmetro" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Modelo" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Modelo de parâmetro" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Dados" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Valor do parâmetro" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Valor do parâmetro" msgid "Note" msgstr "Anotação" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Leitura de código de barras" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Dados de código de barras" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Usuário que leu o código de barras" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Marcador de hora" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Data/hora da verificação do código de barras" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "O endpoint da URL que processou o código de barras" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Dados de contexto para ler código de barras" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Resposta" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Dados de resposta da verificação de código de barras" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Resultado" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "O código de barras foi lido com sucesso?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Ocorreu um erro" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: exclusão de registro de e-mail está protegida. Defina INVENTREE_PROTECT_EMAIL_LOG para falso para permitir a exclusão." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "Mensagem de e-mail" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "Mensagens de e-mail" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Anunciado" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Enviado" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Falhou" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Entregue" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Confirmado" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Entrada" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Saída" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Não responder" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Rastrear entrega" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Monitorado" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Clique no caminho" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "ID global" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificador para esta mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "ID do tópico" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificador deste tópico de mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Tópico" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Tópico vinculado para esta mensagem" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Prioridade" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "Tópico do e-mail" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "Tópicos de e-mail" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Chave" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chave única para este tópico (usada para identificar o tópico)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Identificador exclusivo deste tópico" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Iniciado interno" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Este tópico foi iniciado internamente?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Data/hora em que o tópico foi criado" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Data/hora da última atualização do tópico" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Componente" @@ -2932,7 +2968,7 @@ msgstr "Componente" msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Comprável" @@ -2940,7 +2976,7 @@ msgstr "Comprável" msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Comercializável" @@ -2952,7 +2988,7 @@ msgstr "Peças vão vendíveis por padrão" msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtual" @@ -4215,8 +4251,8 @@ msgstr "A peça interna está ativa" msgid "Supplier is Active" msgstr "O fornecedor está ativo" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Fabricante" @@ -4406,7 +4442,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Fabricante da peça" @@ -4424,8 +4460,8 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "NPF" @@ -4453,8 +4489,8 @@ msgstr "Unidades de pacote devem ser maior que zero" msgid "Linked manufacturer part must reference the same base part" msgstr "Peça do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4493,15 +4529,15 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "Preço base" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Embalagem" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "Múltiplo" @@ -4542,31 +4578,31 @@ msgstr "Data da última atualização de dados disponíveis" msgid "Supplier Price Break" msgstr "Parcelamento de preço do fornecedor" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Moeda padrão utilizada para este fornecedor" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Nome da empresa" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Em estoque" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Faixas de preço" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "Nome amigável" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Ocorreu um erro ao exportar os dados" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "A extensão de exportação de dados retornou dados incorretos" @@ -4735,11 +4771,11 @@ msgstr "Índice de fileira" msgid "Original row data" msgstr "Dados da linha original" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Erros" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Válido" @@ -4899,55 +4935,55 @@ msgstr "Local da impressora" msgid "Scope the printer to a specific location" msgstr "Escopo da impressora para um local específico" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Nome da máquina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Categoria de máquina" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Categoria de máquina" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Controlador" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Controlador utilizado para a máquina" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Máquinas podem ser desativadas" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Controlador disponível" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Nenhum erro" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Iniciado" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Estado da máquina" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Máquina" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Configuração da máquina" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Categoria de configuração" @@ -5066,7 +5102,7 @@ msgstr "Pedido" msgid "Order Complete" msgstr "Pedido completo" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Peça interna" @@ -5124,11 +5160,11 @@ msgstr "Preço total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Moeda do pedido" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" @@ -5168,7 +5204,7 @@ msgstr "Data inicial" msgid "Scheduled start date for this order" msgstr "Data de início programada para esta encomenda" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data prevista" @@ -5477,8 +5513,8 @@ msgstr "Verificado por" msgid "User who checked this shipment" msgstr "Usuário que verificou este envio" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envio" @@ -5544,8 +5580,8 @@ msgstr "A quantidade alocada 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "A quantidade deve ser 1 para um item de estoque serializado" @@ -5685,39 +5721,7 @@ msgstr "quantidade transferida" msgid "Transfer Order Allocation" msgstr "Alocação do pedido de transferência" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID do pedido" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID do pedido a duplicar" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Copiar linhas" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Copiar itens de linha do pedido original" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Copiar linhas extras" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Copiar itens de linha extras do pedido original" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Copiar parâmetros" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "Copiar parâmetros do pedido original" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "Copiar parâmetros do pedido original" msgid "Line Items" msgstr "Itens de linha" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Linhas concluídas" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "Chave de status personalizada" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "Definir um valor de status personalizado dentro deste status lógico" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Duplicar pedido" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Especificar opções para duplicar este pedido" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "A chave de estatuto" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "Chave de status personalizada inválida" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "Chave de status personalizada inválida para este status de pedido" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "ID do pedido inválido" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Nome do fornecedor" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "O pedido não pode ser cancelado" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "O pedido tem itens de linha incompletos" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Precificação automática" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular automaticamente o preço de compra com base nos dados da peça de fornecedor" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Moeda do preço de compra" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Mesclar itens" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Mesclar itens com a mesma peça, destino e data prevista em um único item de linha" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Número interno da peça" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Nome interno da peça" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "A peça de fornecedor deve ser especificada" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder ao pedido de compra" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "O pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Item de linha" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Selecionar local de destino para os itens recebidos" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Inserir código de lote para os itens de estoque recebidos" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Data de validade" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Inserir data de validade para os itens de estoque recebidos" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Inserir números de série para os itens de estoque recebidos" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Substituir as informações de embalagem dos itens de estoque recebidos" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Nota adicional para os itens de estoque recebidos" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Código de barras já está em uso" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Os itens de linha devem ser fornecidos" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "O local de destino deve ser especificado" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Os valores de código de barras fornecidos devem ser únicos" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Remessas" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Remessas concluídas" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "Linhas alocadas" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Moeda do preço de venda" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Itens alocados" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Nenhum detalhe de remessa fornecido" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "O item de linha não está associado a este pedido" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "A quantidade deve ser positiva" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "O item de estoque não passou em todos os testes obrigatórios" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Inserir números de série a alocar" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "A remessa já foi enviada" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "A remessa não está associada a este pedido" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 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:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Os seguintes números de série não estão disponíveis" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "Local de estoque de onde os itens são obtidos (deixe em branco para usar qualquer local)" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "Excluir itens de estoque deste local" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "Atribuir alocações a esta remessa" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "Permitir que o estoque seja retirado de vários locais para atender a um único item de linha" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "Estoque serializado" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "Controlar se os itens de estoque serializados são incluídos na alocação automática" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "Limitar a alocação a estes itens de linha (deixe em branco para alocar todas as linhas)" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "O item de linha não pertence a este pedido" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Item de linha do pedido de devolução" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "O item de linha não corresponde ao pedido de devolução" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "O item de linha já foi recebido" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "Os itens só podem ser recebidos em pedidos que estão em andamento" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Quantidade a devolver" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Moeda do preço da linha" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "Permitir que o pedido seja concluído com alocações incompletas" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "O pedido tem alocações incompletas" @@ -6145,59 +6137,59 @@ msgstr "Tem revisões" msgid "BOM Valid" msgstr "BOM válida" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Categorias em cascata" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "Se verdadeiro, inclui itens nas categorias filhas da categoria informada" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrar por ID numérico da categoria ou o literal 'null'" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "A peça de montagem está ativa" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "A peça de montagem é rastreável" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "A peça de montagem é testável" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "A peça de montagem está bloqueada" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "A peça componente está ativa" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "A peça componente é rastreável" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "A peça componente é testável" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "A peça componente é uma montagem" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "A peça componente é virtual" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "Tem estoque disponível" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Usos" @@ -6210,7 +6202,7 @@ msgstr "Categoria da peça" msgid "Part Categories" msgstr "Categorias de peça" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Local padrão" @@ -6259,656 +6251,660 @@ msgstr "Valor padrão" msgid "Default Parameter Value" msgstr "Valor padrão do parâmetro" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Peças" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Não é possível excluir parâmetros de uma peça bloqueada" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Não é possível modificar parâmetros de uma peça bloqueada" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Não é possível excluir esta peça porque ela está bloqueada" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Não é possível excluir esta peça porque ela ainda está ativa" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Não é possível excluir esta peça porque ela é usada em uma montagem" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "A peça '{self}' não pode ser usada na lista de materiais de '{parent}' (recursivo)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "A peça '{parent}' é usada na lista de materiais de '{self}' (recursivo)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "O IPN deve corresponder ao padrão regex {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "A peça não pode ser uma revisão de si mesma" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "O código de revisão deve ser especificado para uma peça marcada como revisão" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Revisões só são permitidas para peças de montagem" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Não é possível criar uma revisão de uma peça modelo" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "A peça pai deve apontar para o mesmo modelo" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Já existe um item de estoque com este número de série" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado não é permitido nas configurações de peças" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Já existe uma revisão de peça duplicada." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Já existe uma peça com este nome, IPN e revisão." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "As peças não podem ser atribuídas a categorias de peças estruturais!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Esta peça é uma peça modelo?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Esta peça é uma variante de outra peça?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Palavras-chaves" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Palavras-chave da peça para melhorar a visibilidade nos resultados de busca" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Categoria da peça" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisão da peça ou número da versão" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revisão" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Esta peça é uma revisão de outra peça?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revisão de" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Onde este item é normalmente armazenado?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Validade padrão" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Estoque mínimo" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Nível mínimo de estoque permitido" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "Estoque máximo" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "Nível máximo de estoque permitido" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Unidades de medida desta peça" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Esta peça pode ser produzida a partir de outras peças?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Esta peça pode ser usada para produzir outras peças?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Esta peça tem rastreamento para itens únicos?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Esta peça pode ter resultados de teste registrados?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Esta peça pode ser comprada de fornecedores externos?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Esta peça pode ser vendida a clientes?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Esta peça está ativa?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Peças bloqueadas não podem ser editadas" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Esta é uma peça virtual, como um produto de software ou licença?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "Lista de materiais validada" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "A lista de materiais desta peça é válida?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "Checksum da lista de materiais" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Checksum armazenado da lista de materiais" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Lista de materiais verificada por" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Data de verificação da lista de materiais" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Criação de usuário" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Proprietário responsável por esta peça" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Vender em múltiplos" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Moeda usada para armazenar os cálculos de preço" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Custo mínimo da lista de materiais" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Custo mínimo das peças componentes" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Custo máximo da lista de materiais" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Custo máximo das peças componentes" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Custo mínimo de compra" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Custo histórico mínimo de compra" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Custo máximo de compra" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Custo histórico máximo de compra" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Preço interno mínimo" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Custo mínimo com base nas faixas de preço internas" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Preço interno máximo" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Custo máximo com base nas faixas de preço internas" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Preço mínimo do fornecedor" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Preço máximo do fornecedor" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Custo mínimo de variante" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Custo mínimo calculado das peças variantes" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Custo máximo de variante" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Custo máximo calculado das peças variantes" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Custo mínimo" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Substituir custo mínimo" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Custo máximo" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Substituir custo máximo" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Custo mínimo geral calculado" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Custo máximo geral calculado" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Preço de venda mínimo" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Preço de venda mínimo com base nas faixas de preço" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Preço de venda máximo" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Preço de venda máximo com base nas faixas de preço" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Custo de venda mínimo" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Preço de venda histórico mínimo" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Custo de venda máximo" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Preço de venda histórico máximo" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Peça para inventário" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Contagem de itens" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Número de entradas de estoque individuais no momento do inventário" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Estoque total disponível no momento do inventário" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Data" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Data em que o inventário foi realizado" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Custo mínimo do estoque" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Custo mínimo estimado do estoque em mãos" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Custo máximo do estoque" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Custo máximo estimado do estoque em mãos" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Faixa de preço de venda da peça" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Modelo de teste da peça" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nome de modelo inválido - deve incluir pelo menos um caractere alfanumérico" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "Modelos de teste só podem ser criados para peças testáveis" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "Já existe um modelo de teste com a mesma chave para a peça" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Nome do teste" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Insira um nome para o teste" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Chave do teste" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Chave simplificada para o teste" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Descrição do teste" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Insira a descrição deste teste" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Este teste está habilitado?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Obrigatório" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Este teste precisa ser aprovado?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Requer valor" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Requer anexo" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "Este teste requer um anexo de arquivo ao adicionar um resultado de teste?" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Opções válidas para este teste (separadas por vírgula)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "Quantidade inválida - nenhuma unidade especificada para a peça" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "A quantidade deve ser maior ou igual a zero" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "O item da lista de materiais não pode ser modificado - a montagem está bloqueada" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "O item da lista de materiais não pode ser modificado - a montagem da variante está bloqueada" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Selecionar peça pai" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Selecionar peça a ser usada na lista de materiais" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "Quantidade" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "Quantidade de subpeça consumida para produzir uma peça" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Quantidade na lista de materiais para este item" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Este item da lista de materiais é opcional" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este item da lista de materiais é consumível (não é rastreado em pedidos de produção)" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Quantidade de preparação" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Quantidade extra necessária para uma produção, para compensar perdas de preparação" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Perda" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Perda estimada para uma produção, expressa em porcentagem (0-100)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Múltiplo de arredondamento" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arredondar para cima a quantidade de produção necessária para o múltiplo mais próximo deste valor" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Referência do item da lista de materiais" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Notas do item da lista de materiais" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Checksum" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Checksum da linha da lista de materiais" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Validado" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Este item da lista de materiais foi validado" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "É herdado" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este item da lista de materiais é herdado pelas listas de materiais das peças variantes" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Itens de estoque de peças variantes podem ser usados para este item da lista de materiais" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "A quantidade deve ser um valor inteiro para peças rastreáveis" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "A subpeça deve ser especificada" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Substituto do item da lista de materiais" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "A peça substituta não pode ser a mesma que a peça principal" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Item pai da lista de materiais" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Peça substituta" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Peça 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Peça 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Selecionar peça relacionada" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Nota para esta relação" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "Não é possível criar uma relação de peça entre uma peça e ela mesma" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Já existe uma relação duplicada" @@ -6956,331 +6952,319 @@ msgstr "Moeda de compra deste item de estoque" msgid "File is not an image" msgstr "O arquivo não é uma imagem" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Peça original" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Selecionar peça original para duplicar" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Copiar imagem" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Copiar imagem da peça original" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Copiar lista de materiais" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Copiar lista de materiais da peça original" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Copiar dados de parâmetro da peça original" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Copiar notas" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Copiar notas da peça original" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Copiar testes" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Copiar modelos de teste da peça original" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Quantidade inicial de estoque" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Especifique a quantidade inicial de estoque para esta peça. Se a quantidade for zero, nenhum estoque é adicionado." -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Local inicial de estoque" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Especifique o local inicial de estoque para esta peça" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Selecionar fornecedor (ou deixar em branco para pular)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecionar fabricante (ou deixar em branco para pular)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Número de peça do fabricante" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Já existe uma peça de fabricante com este MPN" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Já existe uma peça de fornecedor com este SKU" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Nome da categoria" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Em produção" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Quantidade desta peça atualmente em produção" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantidade pendente desta peça programada para produção" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Itens de estoque" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Revisões" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque total" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Estoque não alocado" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Estoque de variante" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Duplicar peça" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Copiar imagem" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Copiar imagem da peça original" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Copiar lista de materiais" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Copiar lista de materiais da peça original" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Copiar notas" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Copiar notas da peça original" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Copiar testes" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Copiar modelos de teste da peça original" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Criar peça com quantidade inicial de estoque" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Informações do fornecedor" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Adicionar informações iniciais de fornecedor para esta peça" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Copiar parâmetros da categoria" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Copiar modelos de parâmetro da categoria de peças selecionada" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Imagem existente" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Nome do arquivo de uma imagem de peça existente" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "O arquivo de imagem não existe" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Validar toda a lista de materiais" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Pode produzir" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Necessário para pedidos de produção" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Alocado para pedidos de produção" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Necessário para pedidos de venda" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Alocado para pedidos de venda" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "IPN da peça" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "Descrição da peça" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Selecione uma peça para gerar informações de inventário para essa peça (e quaisquer peças variantes)" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Selecione uma categoria para incluir todas as peças dentro dela (e subcategorias)" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Selecione um local para incluir todas as peças com estoque nesse local (incluindo sublocais)" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "Gerar registros de inventário" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "Salvar registros de inventário para as peças selecionadas" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "Gerar relatório" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "Gerar um relatório de inventário para as peças selecionadas" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Preço mínimo" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Substituir o valor calculado do preço mínimo" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Preço máximo" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Substituir o valor calculado do preço máximo" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Não foi possível converter das moedas informadas para {default_currency}" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "O preço mínimo não pode ser maior que o preço máximo" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "O preço máximo não pode ser menor que o preço mínimo" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "Quantidade necessária para este item (pode incluir unidades)" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Selecionar a montagem pai" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Selecionar a peça componente" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "Formato de quantidade inválido" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Selecionar peça da qual copiar a lista de materiais" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Remover dados existentes" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Remover itens existentes da lista de materiais antes de copiar" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Incluir herdados" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluir itens da lista de materiais herdados de peças modelo" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Ignorar linhas inválidas" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Habilite essa opção para ignorar linhas inválidas" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Copiar peças substitutas" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças substitutas ao duplicar itens da lista de materiais" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Fornece suporte nativo para códigos de barras" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Prefixo de código de barras curto" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Personalize o prefixo usado para códigos de barras curtos; pode ser útil em ambientes com várias instâncias do InvenTree" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Criar produções automaticamente" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Criar pedidos de produção automaticamente para montagens" @@ -8617,27 +8601,27 @@ msgstr "Erro ao imprimir etiquetas" #: report/models.py:865 msgid "Snippet" -msgstr "Trecho" +msgstr "Snippet" #: report/models.py:866 msgid "Report snippet file" -msgstr "Arquivo de trecho do relatório" +msgstr "Arquivo de snippet do relatório" #: report/models.py:873 msgid "Snippet file description" -msgstr "Descrição do arquivo de trecho" +msgstr "Descrição do arquivo de snippet" #: report/models.py:891 msgid "Asset" -msgstr "Recurso" +msgstr "Asset" #: report/models.py:892 msgid "Report asset file" -msgstr "Arquivo de recurso do relatório" +msgstr "Arquivo de asset do relatório" #: report/models.py:899 msgid "Asset file description" -msgstr "Descrição do arquivo de recurso" +msgstr "Descrição do arquivo de asset" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" @@ -8801,7 +8785,7 @@ msgstr "Caminho de arquivo estático inválido" #: report/templatetags/report.py:313 msgid "Asset file not found" -msgstr "Arquivo de recurso não encontrado" +msgstr "Arquivo de asset não encontrado" #: report/templatetags/report.py:379 report/templatetags/report.py:495 msgid "Image file not found" @@ -9453,8 +9437,8 @@ msgstr "Nenhum item de estoque fornecido" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "A quantidade não pode exceder a quantidade de estoque disponível ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Local de estoque de destino" @@ -9626,7 +9610,7 @@ msgstr "O item de estoque já está em estoque" msgid "Quantity must not be negative" msgstr "A quantidade não pode ser negativa" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "Mesclar com o estoque existente" @@ -9642,15 +9626,20 @@ msgstr "Notas da transação de estoque" msgid "Set stock location for counted items (optional)" msgstr "Definir local de estoque para os itens contados (opcional)" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "Locais estruturais não podem receber itens de estoque" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "Mesclar itens devolvidos com itens de estoque existentes, se possível" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Próximo número de série" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Número de série anterior" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index d82ee478ca..7371ef900b 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -89,7 +89,7 @@ msgstr "Nu s-a putut converti {original} în {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Cantitate furnizata nevalida" @@ -97,16 +97,16 @@ msgstr "Cantitate furnizata nevalida" msgid "Error details can be found in the admin panel" msgstr "Detaliile de eroare pot fi găsite în panoul de administrare" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Enter Date" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Valoare zecimală nevalidă" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Numărul de referință este prea mare" msgid "Invalid choice" msgstr "Alegere invalidă" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Nume" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Descriere" msgid "Description (optional)" msgstr "Descriere (opțional)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Cale" @@ -334,7 +334,7 @@ msgstr "Eroare de server" msgid "An error has been logged by the server." msgstr "A fost înregistrată o eroare de către server." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Imagine" msgid "Must be a valid number" msgstr "Trebuie sa fie un număr valid" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Monedă" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Selectați moneda din opțiunile disponibile" @@ -373,6 +373,46 @@ msgstr "Tipul de conținut nu a fost găsit" msgid "Content type does not match required mixin class" msgstr "Tipul de conținut nu se potrivește cu mixin necesar clasei" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabic" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Nu este un cod valutar valid" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Starea comenzii" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Construcție părinte" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "İnclude variante" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "İnclude variante" msgid "Part" msgstr "Piesă" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Categorie" @@ -661,125 +701,126 @@ msgstr "Exclude arbore" msgid "Build must be cancelled before it can be deleted" msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opţional" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Asamblate" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Urmarit" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testabilă" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Comandă restantă" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Alocate" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Consumat" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Pe comandă" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 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:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Locatie" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Ieșire" -#: build/api.py:1107 +#: build/api.py:1120 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:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Comenzi de Producție" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "BOM-ul nu a fost validată" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Comandă de producție nu poate fi creată pentru piesa inactiva" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Comandă de producție nu poate fi creată pentru piesa deblocată" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Comenzile de producție pot fi îndeplinite extern doar pentru piesele achiziționabile" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Utilizator sau grup responsabil trebuie specificat" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Piesa din comanda de producție nu poate fi schimbata" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Data țintă trebuie să fie după data de început" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Referință comandă producție" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Referință comandă producție" msgid "Reference" msgstr "Referinţă" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Scurtă descriere a construcției (opțional)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Comanda de producție pentru care această construcție este alocată" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Selectează piesa pentru construit" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referință comandă de vânzare" -#: build/models.py:297 +#: build/models.py:294 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:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Locație sursă" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selectați locația de unde se va prelua stocul pentru această producție (lăsați câmpul necompletat pentru a prelua stocul din orice locație)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Construcție externă" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Această comandă de producție este îndeplinită extern" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Locul destinației" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Selectaţi locaţia unde vor fi stocate elementele complete" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Cantitatea construirii" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Numărul de articole de stoc pentru producție" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Articole finalizate" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Numărul de articole din stoc care au fost finalizate" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Stare producției" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Cod status producție" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Cod lot" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Cod de lot pentru această producție" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Data creării" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Data începerii construcției" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Data de început programată pentru această comandă de construcție" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Data finalizării țintă" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data țintă pentru finalizarea construcției. Construcția va fi depășită după această dată." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Data completării" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "finalizat până la" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Emis de" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Utilizatorul care a emis această comandă de producție" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsabil" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Link extern" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link către URL-ul extern" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Prioritate de construire" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioritatea acestei comenzi de producție" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Cod proiect" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Cod de proiect pentru această comandă de construcție" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "Nu se poate finaliza construcția comenzii cu versiuni deschise" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Nu se poate completa comanda de producție cu rezultate incomplete" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nu este specificată nicio ieșire de producție" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Construcția este deja finalizată" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Construcția nu se potrivește cu Comanda de producție" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Cantitatea trebuie să fie mai mare decât zero" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "Construcția nu a trecut toate testele necesare" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "Stocurile alocate sunt încă în producţie" -#: build/models.py:1151 +#: build/models.py:1136 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:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Element linie comandă de producție" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Construiește obiectul" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Construiește obiectul" msgid "Quantity" msgstr "Cantitate" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Cantitatea necesară pentru comanda de producție" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Cantitatea de stoc consumată" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Articolul din stoc selectat nu se potrivește cu linia BOM" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "Cantitatea alocată trebuie să fie mai mare decât zero" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Cantitatea trebuie sa fie 1 pentru stoc serializat" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Articolul din stoc este supra alocat" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Articol Stoc" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Locație articol stoc" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Cantitatea de stoc alocată pentru construcție" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Instalează în" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Destinație articol in stoc" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Nivel de construcție" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Numele Piesei" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Rezultat de construcție" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Producția nu corespunde cu producția-mamă" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Componenta de ieșire nu corespunde componentei din comanda de producție" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Această producție este deja finalizată" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Această producție nu este alocată integral" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Introduceți cantitatea pentru producția de ieșire" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Număr de serie" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Nu este permisă" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Acceptați nealocat" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Acceptați Incomplet" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Linie de construcție" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Rezultatul construirii" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Nume piesă BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Producție" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Nume Categorie Piesă" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "În Producţie" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Stoc extern" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Stoc disponibil" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Stoc de înlocuire disponibil" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Etichetă Cod Proiect" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "Descrierea proiectului" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Valoarea nu trece verificările de validare" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Utilizator" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Preț" @@ -1679,560 +1715,560 @@ msgstr "Preț" msgid "Unit price at specified quantity" msgstr "Preț unitar la cantitatea specificată" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Punct final" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Punctul final la care acest webhook este primit" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Nume pentru acest webhook" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Este acest webhook activ" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token-ul" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token pentru acces" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Secret" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Host" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Host de la care acest mesaj a fost primit" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id-ul" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Titlu" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Publicată" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Rezumat" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Citit" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "A fost citită această știre?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Fișier imagine" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Unitate personalizată" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Numele unității trebuie să fie un identificator valid" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Numele unității" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Comentariu" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Comentariu atașament" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Data încărcării" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Numele statului" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Descrierea listei de selecție" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Descrierea parametrului" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "Descrierea piesei furnizorului" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Introduceți codul lotului pentru articolele din stoc primite" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "Are Versiuni" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descrierea piesei (opțional)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Versiunea" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Este aceasta parte o versiune a unei alte părți?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Versiune Din" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Responsabil pentru acest capitol" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Descriere test" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Introduceți descrierea pentru acest test" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Este necesar acest test pentru a trece?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Versiunea" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "Descrierea piesei" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index c53e1fdf6e..66c7cb719b 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -89,7 +89,7 @@ msgstr "Невозможно преобразовать {original} в {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "недопустимое количество" @@ -97,16 +97,16 @@ msgstr "недопустимое количество" msgid "Error details can be found in the admin panel" msgstr "Подробности об ошибке можно найти в панели администратора" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Введите дату" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Не верное десятичное значение" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Номер ссылки слишком большой" msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Название" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Описание" msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Путь" @@ -334,7 +334,7 @@ msgstr "Ошибка сервера" msgid "An error has been logged by the server." msgstr "Сервер зарегистрировал ошибку." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Изображение" msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" @@ -373,6 +373,46 @@ msgstr "Тип содержимого не найден" msgid "Content type does not match required mixin class" msgstr "Тип содержимого не соответствует требуемому классу миксина" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Скопировать параметры" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Копировать позиции" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Копировать позиции из исходного заказа" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Копировать дополнительные позиции" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Копировать дополнительные позиции из исходного заказа" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Арабский" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Неверный код валюты" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Статус заказа" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Включая варианты" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Включая варианты" msgid "Part" msgstr "Деталь" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Категория" @@ -661,125 +701,126 @@ msgstr "Исключить дерево" msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Расходник" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Необязательно" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Сборная деталь" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Тестируемая" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Невыполненные заказы" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Потреблено" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "В заказе" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Заказ на производство" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Расположение" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Выход" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Фильтрация по идентификатору исходящей складской позиции. Используйте 'null', чтобы найти несмонтированные элементы сборки." -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Заказы на производство" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Сборка BOM не подтверждена" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Порядок сборки не может быть создан для неактивной части" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Порядок сборки не может быть создан для разблокированной части" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Заказ на сборку может быть помечен сторонним только для покупных деталей" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Должен быть указан ответственный пользователь или группа" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Деталь заказа на производства не может быть изменена" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Целевая дата должна быть после даты начала" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Ссылка на заказ на производство" msgid "Reference" msgstr "Номер" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Краткое описание заказа на производство (необязательно)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Заказ на производство, которому принадлежит этот заказ на производство" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Выберите деталь для производства" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Место хранения комплектующих" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Сторонняя сборка" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Этот заказ на сборку выполнен сторонней компанией" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Место хранения результата" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Количество производимых деталей" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Количество складских позиций для производства" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Произведенные детали" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Количество складских позиций, которые были произведены" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Статус заказа на производство" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Дата начала сборки" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Запланированная начальная дата этого заказа на сборку" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "выполнено" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Создано" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Пользователь, создавший этот заказ на производство" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Ссылка на внешний URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Приоритет производства" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Код проекта" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "Невозможно завершить заказ на сборку при наличии открытых дочерних сборок" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Невозможно завершить заказ на сборку при незавершенных выходах" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых деталей должны быть указаны серийные номера" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "Выход сборки не прошёл все необходимые тесты" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "Сборка {serial} не прошла все необходимые тесты" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "Выделенные на складе товары все еще находятся в производстве" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "Невозможно частично завершить выход сборки с распределёнными элементами" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Номер позиции для производства" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Объект производства" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Объект производства" msgid "Quantity" msgstr "Количество" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Количество израсходованного запаса" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Установить в" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Целевая складская позиция" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Уровень сборки" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Наименование детали" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Местоположение склада для результата сборки" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, даже если остатки не были полностью зарезервированы" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Израсходовать зарезервированные остатки" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "Израсходовать складские позиции, которые были зарезервированы для этой продукции" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "Производственный заказ имеет незавершённые дочерние заказы" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Заказ на производство должен быть в стадии выполнения" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Ссылка на спецификацию (BOM)" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID детали в спецификации (BOM)" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Название детали в спецификации (BOM)" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "Установить в" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Сборка" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Деталь поставщика" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Зарезервированное количество" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Ссылка на сборку" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Название категории детали" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Отслеживание" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Запланировано к сборке" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Доступный запас" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Доступный запас заменителей" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Доступный запас вариантов" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "Потреблённое количество превышает выделенное количество" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Дополнительные примечания по расходу запаса" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "Элемент сборки должен ссылаться на правильный заказ на сборку" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Дублирование выделения элемента сборки" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "Строка сборки должна ссылаться на правильный заказ на сборку" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Дублирование выделения строки сборки" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "Должен быть указан хотя бы один элемент или строка" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Название кода проекта" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Обновлено" @@ -1608,9 +1644,9 @@ msgstr "Уникальный код проекта" msgid "Project description" msgstr "Описание проекта" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Значение не прошло проверку" msgid "Key string must be unique" msgstr "Строка ключа должна быть уникальной" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Пользователь" msgid "Price break quantity" msgstr "Скидка распространяется на заданное количество" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Цена" @@ -1679,560 +1715,560 @@ msgstr "Цена" msgid "Unit price at specified quantity" msgstr "Цена за единицу для указанного количества" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Конечная точка" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Конечная точка, на которой принимается этот веб-хук" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Имя для этого веб-хука" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Этот веб-хук активен?" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Токен" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Токен для доступа" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Секрет" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Общий ключ для HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Уникальный идентификатор этого сообщения" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Хост" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Хост, с которого было получено это сообщение" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Заголовок" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Заголовок этого сообщения" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Тело" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Текст этого сообщения" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Конечная точка, на которую было получено это сообщение" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Работал над" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Работа над этим сообщением завершена?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Код" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Заголовок" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ссылка" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Опубликовано" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Автор" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Итого" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Читать" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Эта новость была прочитана?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Файл изображения" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Тип целевой модели для этого изображения" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "ID целевой модели для этого изображения" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Пользовательская единица измерения" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Символ единицы должен быть уникальным" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Имя единицы должно быть действительным идентификатором" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Название единицы" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Символ" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Обозначение единицы измерения (необязательно)" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Определение" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Определение единицы измерения" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Вложения" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Файл не найден" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Тип модели" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Тип целевой модели для изображения" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Выберите файл для вложения" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Комментарий" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Описание вложения" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Дата загрузки" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Дата загрузки файла" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Размер файла" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Размер файла в байтах" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Указан недопустимый тип модели для вложения" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Пользовательское состояние" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Пользовательские состояния" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Группа статусов" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Группа статусов, которая будет дополнена пользовательским состоянием" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Логическое состояние" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Логическое состояние, соответствующее пользовательскому состоянию в бизнес-логике" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Значение" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Числовое значение, которое будет сохранено в базе данных" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Название состояния" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Метка" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Метка, которая будет отображаться на фронтенде" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Цвет" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Цвет отображения в интерфейсе" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Модель" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Модель, с которой связано это состояние" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Необходимо выбрать модель" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Необходимо выбрать ключ" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Логическое состояние должно быть выбрано" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "Ключ должен отличаться от логического ключа" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Должен быть указан корректный класс ссылочного статуса" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "Состояние должно отличаться от других логических состояний выбранного статуса" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "Логическое состояние должно быть из множества логических состояний выбранного статуса" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Имя должно отличаться от имен эталонного статуса" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Список выбора" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Списки выбора" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Название списка выбора" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Описание списка выбора" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Заблокирована" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Этот список выбора заблокирован?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Можно ли использовать этот список выбора?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Исходный плагин" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Плагин, который предоставляет список выбора" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Исходная строка" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Необязательная строка, определяющая источник, используемый для этого списка" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Запись по умолчанию" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Вариант по умолчанию для этого списка выбора" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Создано" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Дата и время создания списка выбора" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Последнее обновление" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Дата и время последнего обновления списка выбора" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Вариант списка выбора" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Варианты списка выбора" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Список выбора, к которому относится данный вариант" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Значение варианта списка выбора" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Метка для элемента списка выбора" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Описание варианта списка выбора" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Активен ли варианта списка выбора?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Шаблон параметра" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Шаблоны параметров" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "У параметров-переключателей не может быть единицы измерения" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "У параметров-переключателей не может быть вариантов" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Варианты должны быть уникальными" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Имя шаблона параметров должно быть уникальным" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Тип целевой модели для этого шаблона параметра" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Название параметра" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Единица измерения" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Физическая единица этого параметра" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Описание параметра" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Переключатель" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Этот параметр является переключателем?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Варианты" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Возможные варианты этого параметра (разделить запятой)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Список выбора для этого параметра" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Включено" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Включен ли этот шаблон параметра?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Параметр" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Параметры" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Указан неверный тип модели для параметра" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "ID модели" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "ID целевой модели для этого параметра" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Шаблон" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Шаблон параметра" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Данные" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Значение параметра" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Значение параметра" msgid "Note" msgstr "Заметка" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Опциональное поле записей" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Сканирование штрихкодов" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Данные штрихкода" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Пользователь, который сканировал штрих-код" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Метка времени" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Дата и время сканирования штрих-кода" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "URL-адрес, обработавший штрихкод" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Контекст" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Контекстные данные для сканирования штрих-кода" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Ответ" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Данные ответа от сканирования штрихкода" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Результат" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Сканирование штрихкода было успешным?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Произошла ошибка" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Удаление журнала электронной почты защищено. Установите INVENTREE_PROTECT_EMAIL_LOG в False, чтобы разрешить удаление." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "Сообщение электронной почты" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "Сообщения электронной почты" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Объявлено" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Отправлено" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Неудача" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Доставлено" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Подтверждено" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Входящее" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Исходящее" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Без ответа" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Отслеживать доставку" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Отслеживать прочтение" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Отслеживать клики" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "Глобальный идентификатор" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Идентификатор этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "ID цепочки" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Идентификатор темы этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Цепочка" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Связанная цепочка для этого сообщения" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Приоритет" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "Цепочка электронной почты" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "Цепочки электронной почты" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Ключ" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Уникальный ключ для этой цепочки (используется для идентификации цепочки)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Уникальный идентификатор этой цепочки" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Запущено внутренне" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Эта цепочка была начата внутри?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Дата и время создания цепочки" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Дата и время последнего обновления цепочки" @@ -2923,8 +2959,8 @@ msgstr "По умолчанию детали являются шаблонами msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Компонент" @@ -2932,7 +2968,7 @@ msgstr "Компонент" msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Можно купить" @@ -2940,7 +2976,7 @@ msgstr "Можно купить" msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Можно продавать" @@ -2952,7 +2988,7 @@ msgstr "Детали продаются по умолчанию" msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Виртуальная" @@ -4215,8 +4251,8 @@ msgstr "Внутренняя деталь активна" msgid "Supplier is Active" msgstr "Поставщик активен" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Производитель" @@ -4406,7 +4442,7 @@ msgstr "Записи отправления для внутреннего пол msgid "Link to address information (external)" msgstr "Ссылка на адресную информацию (внешняя)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Производитель детали" @@ -4424,8 +4460,8 @@ msgstr "Выберите деталь" msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "Артикул производителя" @@ -4453,8 +4489,8 @@ msgstr "Единицы упаковки должны быть больше ну msgid "Linked manufacturer part must reference the same base part" msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Поставщик" msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Артикул поставщика" @@ -4493,15 +4529,15 @@ msgstr "Ссылка на сайт поставщика" msgid "Supplier part description" msgstr "Описание детали поставщика" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Упаковка" @@ -4518,7 +4554,7 @@ msgstr "Количество в упаковке" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Общее количество, поставляемое в одной упаковке. Оставьте пустым для отдельных элементов." -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "множественные" @@ -4542,31 +4578,31 @@ msgstr "Дата последнего обновления данных о до msgid "Supplier Price Break" msgstr "Ценовой порог поставщика" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Валюта по умолчанию для этого поставщика" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Название компании" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "На складе" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Ценовые пороги" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Произошла ошибка при экспорте данных" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Плагин экспорта данных вернул неправильный формат данных" @@ -4735,11 +4771,11 @@ msgstr "Номер строки" msgid "Original row data" msgstr "Исходные данные строки" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Ошибки" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Корректный" @@ -4899,55 +4935,55 @@ msgstr "Расположение принтера" msgid "Scope the printer to a specific location" msgstr "Ограничить принтер конкретным местоположением" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Название оборудования" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Тип оборудования" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Тип оборудования" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Драйвер" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Драйвер для подключения оборудования" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Оборудование может быть отключено" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Драйвер доступен" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Ошибок нет" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Инициализировано" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Статус машины" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Машина" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Конфигурация машины" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Тип конфигурации" @@ -5066,7 +5102,7 @@ msgstr "Заказ" msgid "Order Complete" msgstr "Заказ выполнен" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Внутренняя деталь" @@ -5124,11 +5160,11 @@ msgstr "Общая стоимость" msgid "Total price for this order" msgstr "Общая стоимость этого заказа" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Валюта заказа" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Валюта заказа (оставьте пустым для использования валюты по умолчанию для компании)" @@ -5168,7 +5204,7 @@ msgstr "Начальная дата" msgid "Scheduled start date for this order" msgstr "Запланированная начальная дата этого заказа" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Целевая дата" @@ -5477,8 +5513,8 @@ msgstr "Проверн" msgid "User who checked this shipment" msgstr "Пользователь, проверивший эту отгрузку" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Отправление" @@ -5544,8 +5580,8 @@ msgstr "Количество распределения не может прев msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID заказа" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID заказа для дублирования" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Копировать позиции" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Копировать позиции из исходного заказа" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Копировать дополнительные позиции" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Копировать дополнительные позиции из исходного заказа" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Скопировать параметры" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Позиции" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Завершённые позиции" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Дублировать заказ" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Указать параметры для дублирования этого заказа" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Недействительный ID заказа" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Имя поставщика" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Заказ не может быть отменён" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Разрешить закрывать заказ с незавершёнными позициями" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "В заказе есть незавершённые позиции" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Автоматическая цена" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Валюта заказа на закупку" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Объединять элементы" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Внутренний артикул детали" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Внутреннее название детали" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Необходимо указать поставляемую деталь" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Необходимо указать заказ на закупку" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Поставщик должен соответствовать заказу на закупку" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Заказ на закупку должен соответствовать поставщику" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Истекает" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Введите дату истечения срока годности для поступающих складских единиц" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Переопределить информацию об упаковке для поступающих складских единиц" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Дополнительная заметка для поступающих складских единиц" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Штрихкод уже используется" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Необходимо предоставить позиции" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Необходимо указать место назначения" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Предоставленные значения штрихкодов должны быть уникальными" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Отгрузки" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Выполненные отгрузки" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "Зарезервированные позиции" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Выделенные элементы" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Информация об отгрузке не предоставлена" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Позиция не связана с этим заказом" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Количество должно быть положительным" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Отгрузка уже отправлена" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Отгрузка не связана с этим заказом" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Совпадений для следующих серийных номеров не найдено" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Следующие серийные номера недоступны" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Позиция заказа на возврат" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Позиция не соответствует заказу на возврат" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Позиция уже получена" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Количество для возврата" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Валюта цены позиции" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "Есть ревизии" msgid "BOM Valid" msgstr "Спецификация валидна" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Каскадные категории" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "Если включено, включать элементы в дочерних категориях указанной категории" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Фильтровать по числовому идентификатору категории или литералу 'null'" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "Сборочная деталь активна" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "Отслеживаемая сборочная деталь" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Сборная деталь тестируется" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "Деталь компонента активна" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "Отслеживаемая деталь компонента" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Компонент тестируется" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "Сборочная деталь компонента" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "Виртуальная деталь компонента" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "На складе" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Использования" @@ -6210,7 +6202,7 @@ msgstr "Категория детали" msgid "Part Categories" msgstr "Категория детали" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Место хранения по умолчанию" @@ -6259,656 +6251,660 @@ msgstr "Значение по умолчанию" msgid "Default Parameter Value" msgstr "Значение параметра по умолчанию" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Детали" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Нельзя удалить параметры заблокированной детали" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Нельзя изменить параметры заблокированной детали" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Нельзя удалить эту деталь, так как она заблокирована" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Нельзя удалить эту деталь, так как она ещё активна" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Нельзя удалить эту деталь, так как она используется в сборке" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Деталь '{self}' не может быть использована в спецификации для '{parent}' (рекурсивно)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Деталь '{parent}' используется в спецификации для '{self}' (рекурсивно)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN должен соответствовать регулярному выражению {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Деталь не может быть ревизией самой себя" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Ревизии разрешены только для сборочных деталей" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Нельзя сделать ревизию шаблонной детали" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "Родительская деталь должна указывать на тот же шаблон" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Складская позиция с этим серийным номером уже существует" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Дублирующий IPN не разрешён в настройках детали" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Дублирующая ревизия детали уже существует." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Деталь с таким именем, внутренним артикулом и ревизией уже существует." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Детали не могут быть назначены структурным категориям!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Разновидность" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Описание детали (необязательно)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Ключевые слова" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Категория" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Внутренний артикул" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Ревизия" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Является ли эта деталь ревизией другой детали?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Ревизия от" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Срок действия по умолчанию" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Минимальный запас" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Единицы измерения этой детали" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Можно ли в этой детали записывать результаты тестов?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Эта деталь активна?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Заблокированные детали нельзя редактировать" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "Спецификация подтверждена" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Валидна ли спецификация для этой детали?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "Контрольная сумма BOM" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Сохранённая контрольная сумма спецификации" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOM проверил" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Дата проверки BOM" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Создатель" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Ответственный владелец этой детали" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Валюта, используемая для кэширования расчётов цен" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Минимальная стоимость компонентных деталей" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Максимальная стоимость компонентных деталей" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Минимальная стоимость закупки" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Минимальная историческая стоимость закупки" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Максимальная стоимость закупки" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Максимальная историческая стоимость закупки" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Минимальная внутренняя цена" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Минимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Максимальная внутренняя цена" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Максимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Минимальная цена поставщика" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Минимальная цена детали от внешних поставщиков" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Максимальная цена поставщика" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Максимальная цена детали от внешних поставщиков" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Минимальная стоимость варианта" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Расчётная минимальная стоимость вариантов деталей" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Максимальная стоимость варианта" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Расчётная максимальная стоимость вариантов деталей" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Переопределить минимальную стоимость" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Переопределить максимальную стоимость" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Расчётная общая минимальная стоимость" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Расчётная общая максимальная стоимость" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Минимальная цена продажи" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Минимальная цена продажи на основе ценовых уровней" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Максимальная цена продажи" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Максимальная цена продажи на основе ценовых уровней" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Минимальная стоимость продажи" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Минимальная историческая цена продажи" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Максимальная стоимость продажи" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Максимальная историческая цена продажи" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Деталь для инвентаризации" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Количество элементов" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Количество отдельных складских позиций на момент инвентаризации" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Общий доступный запас на момент инвентаризации" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Дата" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Дата проведения инвентаризации" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Минимальная стоимость запасов" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Оценочная минимальная стоимость имеющихся запасов" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Максимальная стоимость запасов" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Оценочная максимальная стоимость имеющихся запасов" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Цена продажи детали по порогу" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Шаблон теста детали" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Недопустимое имя шаблона — должно содержать хотя бы один буквенно-цифровой символ" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "Шаблоны тестов можно создавать только для тестируемых деталей" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "Шаблон теста с тем же ключом уже существует для детали" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Ключ теста" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Упрощённый ключ для теста" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Активен ли данный тест?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Необходим" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Необходимо ли пройти этот тест?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "Требуется ли значение для этого теста при добавлении результата?" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Требуются вложения" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "Требуется ли прикреплять вложение в виде файла при добавлении результатов теста?" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Допустимые варианты данного теста(через запятую)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "Пункт спецификации нельзя изменить — сборка заблокирована" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Пункт спецификации нельзя изменить — вариант сборки заблокирован" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Количество элементов в спецификации" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Эта позиция спецификации необязательна" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник (она не отслеживается в заказах на производство)" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Количество для подготовки" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Дополнительное требуемое количество для сборки, учитывающее потери при подготовке" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Потери" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Оценочные потери для сборки, выраженные в процентах (0–100)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Округление до кратности" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Округлять требуемое производственное количество до ближайшего кратного этого значения" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Ссылка на позицию спецификации" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Заметка о позиции в спецификации" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Контрольная сумма строки спецификации" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Проверен" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Этот пункт спецификации подтверждён" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Наследуется" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Позиция спецификации наследуется разновидностями детали" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Эту позицию можно заменять деталями, которые находятся на складе" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Необходимо указать поддеталь" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Замена пункта спецификации" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "Деталь для замены не может быть такой же, как основная деталь" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Деталь 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Деталь 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Выберите связанную деталь" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Заметка для данной связи" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "Нельзя создать отношение детали с самой собой" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Дублирующее отношение уже существует" @@ -6956,331 +6952,319 @@ msgstr "Валюта закупки складской позиции" msgid "File is not an image" msgstr "Файл не является изображением" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Оригинальная деталь" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Выберите исходную деталь для копирования" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Копировать Изображение" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Копировать изображение из исходной детали" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Скопировать BOM" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Копировать спецификацию из исходной детали" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Копировать данные параметров из исходной детали" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Копировать Записи" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Скопировать записи из оригинальной детали" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Копировать тесты" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Копировать шаблоны тестов из исходной детали" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Начальное количество на складе" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Задайте начальное количество этой детали на складе. Если количество равно 0, складская позиция не будет добавлена." -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Начальное местоположение запаса" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Укажите начальное местоположение запаса для этой детали" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Артикул производителя" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Выбранная компания не является допустимым поставщиком" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Выбранная компания не является допустимым производителем" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Деталь производителя с данным артикулом уже существует" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Деталь поставщика с данным артикулом уже существует" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Название категории" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Производится" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Количество этой детали, находящееся в производстве" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Оставшееся количество этой детали, запланированное к сборке" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Складские позиции" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Ревизии" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Общий запас" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Нераспределённый запас" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Запас вариантов" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Копировать начальные данные из другой детали" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Копировать Изображение" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Копировать изображение из исходной детали" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Скопировать BOM" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Копировать спецификацию из исходной детали" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Копировать Записи" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Скопировать записи из оригинальной детали" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Копировать тесты" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Копировать шаблоны тестов из исходной детали" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Создавать деталь с начальным количеством на складе" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Информация о поставщике" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Добавить начальную информацию о поставщике для этой детали" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Имя файла существующего изображения детали" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Файл изображения не существует" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Проверить всю спецификацию" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Можно произвести" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Требуется для заказов на сборку" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Выделено для заказов на сборку" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Требуется для заказов на продажу" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Выделено для заказов на продажу" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "Внутренний артикул детали" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "Описание детали" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Выберите деталь (и любые её варианты) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Выберите категорию (и любые её подкатегории) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Выберите склад, чтобы включить все детали в наличии в указанном складе (включая подразделы)" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "Создать записи инвентаризации" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "Сохранить записи инвентаризации для выбранных деталей" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "Создать отчёт инвентаризации для выбранных деталей" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Переопределить рассчитанное значение минимальной цены" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Валюта минимальной цены" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Переопределить рассчитанное значение максимальной цены" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Валюта максимальной цены" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Обновить цены для этой детали" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Не удалось конвертировать из предоставленных валют в {default_currency}" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Минимальная цена не должна превышать максимальную цену" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Максимальная цена не должна быть меньше минимальной" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Выберите родительскую сборку" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Выберите деталь, которая является компонентом" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Выберите деталь, из которой копировать спецификацию" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Удалить существующие данные" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Удалить существующие пункты спецификации перед копированием" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Включая наследуемые" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Включать пункты спецификации, унаследованные от шаблонных деталей" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Пропустить некорректные строки" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Включите эту опцию, чтобы пропускать недопустимые строки" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Копировать детали-заменители" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Копировать детали-заменители при дублировании пунктов спецификации" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Предоставляет встроенную поддержку штрихкодов" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Префикс короткого штрихкода" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Настройте префикс, используемый для коротких штрихкодов, что может быть полезно в средах с несколькими экземплярами InvenTree" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Автоматически создавать сборки" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Автоматически создавать заказы на сборку для сборочных изделий" @@ -9453,8 +9437,8 @@ msgstr "Складской элемент не предоставлен" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Количество не должно превышать доступный запас ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Целевое место хранения" @@ -9626,7 +9610,7 @@ msgstr "Складской элемент уже на складе" msgid "Quantity must not be negative" msgstr "Количество не должно быть отрицательным" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "Объединить с существующим запасом" @@ -9642,15 +9626,20 @@ msgstr "Заметки об изменении склада" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "Объединять возвращённые элементы с существующими складскими элементами, если возможно" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Следующий серийный номер" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Предыдущий серийный номер" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 9c2904d288..b424ba469e 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -89,7 +89,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "" @@ -97,16 +97,16 @@ msgstr "" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "" @@ -334,7 +334,7 @@ msgstr "" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 388171d14f..ca42228014 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -89,7 +89,7 @@ msgstr "Ni mogoče pretvoriti {original} v {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Podana napačna količina" @@ -97,16 +97,16 @@ msgstr "Podana napačna količina" msgid "Error details can be found in the admin panel" msgstr "Podrobnosti napake so vidne v pogledu administratorja" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Vnesi datum" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referenčna številka prevelika" msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Pot" @@ -334,7 +334,7 @@ msgstr "Napaka strežnika" msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Neobvezno" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Montaža" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Sledi" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testno" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Dodeljeno" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog izgradnje" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Nalogi izgradnje" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Sestava BOM ni bila potrjena" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Naveden mora biti odgovorni uporabnik ali skupina" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Referenca naloga izgradnje" msgid "Reference" msgstr "Referenca" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Izberite del za izgradnjo" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referenca dobavnica" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Lokacija vira" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Izberite lokacijo dela za to izgradnjo (v primeru da ni pomembno pusti prazno)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Ciljna lokacija" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Količina izgradenj" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Število postavk za izgradnjo" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Končane postavke" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Število postavk zaloge, ki so bile končane" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Datum ustvarjenja" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Rok dokončanja" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Rok končanja izdelave. Izdelava po tem datumu bo v zamudi po tem datumu." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Datom končanja" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "dokončal" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Izdal" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoren" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Odgovorni uporabnik ali skupina za to naročilo" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Zunanja povezava" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "Količina" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Uporabnik" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Povezava" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Priloga" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Manjka datoteka" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Manjka zunanja povezava" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Izberite prilogo" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Komentar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index fbb85d9743..c88918007b 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -89,7 +89,7 @@ msgstr "Nije moguće konvertovati {original} u {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" @@ -97,16 +97,16 @@ msgstr "Isporučena nevažeća količina" msgid "Error details can be found in the admin panel" msgstr "Detalji o grešci se mogu naći u admin sekciji" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Unesite datum" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Neispravna decimalna vrednost" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Broj reference je predugačak" msgid "Invalid choice" msgstr "Nevažeći izvor" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Putanja" @@ -334,7 +334,7 @@ msgstr "Greška servera" msgid "An error has been logged by the server." msgstr "Server je zabležio grešku." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Slika" msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Kopiraj parametre" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Kopiraj porudžbine" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Kopiraj stavke porudžbine sa originalnog naloga" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Kopiraj dodatne porudžbine" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Kopiraj dodatne stavke porudžbine sa originalnog naloga" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabski" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Nevažeći kod valute" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Status naloga" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Roditeljski proizvod" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Uključi varijante" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Uključi varijante" msgid "Part" msgstr "Deo" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategorija" @@ -661,125 +701,126 @@ msgstr "Ne uključuj stablo" msgid "Build must be cancelled before it can be deleted" msgstr "Proizvod mora biti poništen pre nego što se izbriše" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Opciono" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Sklapanje" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Praćeno" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Proverljivo" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Neizmirena narudžbina" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Alocirano" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Po narudžbini" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog za izradu" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Lokacija" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Nalozi za izradu" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "BOM za sastavljanje nije potvrđeno" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Nalog za izradu se ne može kreirati za neaktivan deo" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Nalog za izradu se ne može kreirati za zaključan deo" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Odgovorni korisnik ili grupa mora biti određena" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Deo u nalogu za izradu ne može se izmeniti" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Reference naloga za pravljenje" msgid "Reference" msgstr "Referenca" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Kratak opis izrade (nije obavezno)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Izaberi deo za izgradnju" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Referenca naloga za prodaju" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Lokacija izvora" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Izaberi lokaciju zaliha za ovu izgradnju (ostaviti prazno ako hoćete bilo koju lokaciju zaliha" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Lokacija odredišta" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Izaberi lokaciju gde će se završene stavke skladištiti" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Količina izgradnje" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Broj stavki za izgradnju" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Kompletirane stavke" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Broj stavki u zalihama koje su kompletirane" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Kod statusa izgradnje" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Kod serije" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Kod izgradnje za ovaj izlaz" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "datum kreiranja" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Datum ciljanog završetka" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ciljani datum za završetak izgradnje. Izgradnja će biti u prekoračenju nakon ovog datuma" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Datum završetka" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "kompletirano od " -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "izdato od" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Korisnik koji je izdao nalog za izgradnju" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoran" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Korisnik ili grupa koja je odgovorna za ovaj nalog za izgradnju" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Spoljašnja konekcija" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Link za eksterni URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Prioritet izgradnje" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Prioritet ovog naloga za izgradnju" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Kod projekta" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Kod projekta za ovaj nalog za izgradnju" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Nije određen izlaz izgradnje" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Izlaz izgradnje je već kompletiran" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Količina mora biti veća od nule" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Stavka porudžbine naloga za izgradnju" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Objekat izgradnje" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Objekat izgradnje" msgid "Quantity" msgstr "Količina" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Potrebna količina za nalog za izgradnju" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 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:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Stavka zaliha je prealocirana" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Stavka zaliha" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Izvor stavke zaliha" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Količina zaliha za alociranje za izgradnju" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Ugradi u" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Stavka zaliha odredišta" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Nivo izgradnje" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Ime dela" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Izlaz izgradnje" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Izlaz izgradnje se ne slaže sa nadređenom izgradnjom" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Izlazni deo se ne slaže sa delom Naloga za Izgradnju" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Ovaj izlaz izgradnje je već kompletiran" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Ovaj izlaz izgradnje nije u potpunosti alociran" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Unesi količinu za izlaz izgradnje" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "Brojčana količina potrebna za delove koji mogu da se prate" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Serijski brojevi" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Unesi serijske brojeve za izlaz izgradnje" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Lokacija zaliha za izlaz izgradnje" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Automatski alociraj serijske brojeve" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Sledeći serijski brojevi već postoje ili su neispravni" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Lista izlaza izgradnje se mora obezbediti" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Lokacija zaliha za otpisane izlaze" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Odbaci alokacije" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Odbaci bilo kojiu alokaciju zaliha za otpisane izlaze" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Razlog za otpisane izlaz(e) izgradnje" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Lokacija za završene izlaze izgradnje" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Prihvati nekompletirane Alokacije" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "kompletiraj izlaze ako zalihe nisu u potpunosti alocirane" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Troši alocirane zalihe" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Ukloni nekompletirane izlaze" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Izbriši svei izlaze izgradnje koji nisu kompletirani" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Nije dozvoljeno" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Prihvati kao potrošeno od strane ovog naloga za izgradnju" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Izmesti bre završetka ovog naloga za izgradnju" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Sveukupne izdvojene zalihe" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Neke stavke zaliha su prealocirane" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Prihvati nealocirano" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Tražene zalihe nisu u potpunosti alocirane" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Prihvati nekompletirano" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Traženi broj izgradnji nije kompletan" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "Nalog za izgradnju ima otvoren potčinjene naloge za izgradnju" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Nalog za izgradnju mora biti u stanju produkcije" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Nalog za izgradnju ima nekompletne izlaze" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Porudžbina izgradnje" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Izlaz izgradnje" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Izlaz izgradnje mora da referencira istu izgradnju" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Stavka porudžbine za izradu" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Stavka mora da bude u zalihama" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupna količina ({q}) premašena" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Stavke alociranja se moraju odrediti" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Isključi lokaciju" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Isključi stavke zaliha za ovu selektovanu lokaciju" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Zamenljive zalihe" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Zamenske zalihe" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Dozvoli alociranje delova koji su zamenski" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Opcionalne stavke" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "Alociraj opcione BOM stavke na nalog za izgradnju" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "Referenca BOM" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "BOM ID dela" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "BOM ime dela" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Deo dobavljača" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Alocirana količina" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Referenca izgradnje" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Ime kategorije dela" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Može da se prati" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "BOM stavka" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "U proizvodnji" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Spoljašnje zalihe" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Dostupne zalihe" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Dostupne zamenske zalihe" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Dostupne varijante zaliha" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Naziv koda projekta" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Ažurirano" @@ -1608,9 +1644,9 @@ msgstr "Jedinstveni kod projekta" msgid "Project description" msgstr "Opis projekta" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Vrednost ne prolazi test ispravnosti" msgid "Key string must be unique" msgstr "Tekstualni ključ mora da bude jedinstven" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Korisnik" msgid "Price break quantity" msgstr "Prelomna količina cene" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Cena" @@ -1679,560 +1715,560 @@ msgstr "Cena" msgid "Unit price at specified quantity" msgstr "Cena jedinice za određenu količinu" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Krajnja tačka" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Krajnja tačka na kojoj je primljen zahtev za izmenu web stranice" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Ime ovog zahteva za izmenu stranice" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Da li je ovaj zahtev za izmenu aktivan?" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Token za pristup" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Tajna" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Deljena tajna za HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "ID poruke" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Jedinstveni identifikator za ovu poruku" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Računar" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Računar koji je primio ovu poruku" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Zaglavlje" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Zaglavlje ove poruke" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Telo" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Telo ove poruke" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Krajnja tačka na kojoj je ova poruka primljena" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Radilo se na " -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Da li je rad sa ovom porukom završen?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Naslov" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Objavljeno" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Autor" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Rezime" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Čitaj" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Da li je ova stavka vesti pročitana" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Datoteka slike" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Ciljni tip modela za ovu sliku" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "Ciljni ID modela za ovu sliku" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Posebna jedinica" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Simbol jedinice mora biti jedinstven" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Ime jedinice mora da bude ispravan identifikator" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Ime jedinice" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Simbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Opcioni simbol jedinice" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definicija" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Definicija jedinice" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Prilog" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Nedostaje datoteka" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Nedostaje eksterni link" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Izaberite datoteku za prilog" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Komentar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Komentar priloga" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Datum učitavanja" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Datum kada je datoteka učitana" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Veličina datoteke" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Veličina datoteke u bajtovima" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Određen je neispravan tip modela za prilog" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Posebno stanje" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Posebna stanja" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Referentni status podešen" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Status je podešen i produžen je sa ovim posebnim stanjem" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logički ključ" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "Stanje logičkog ključa je jednako posebnom ključu u poslovnoj logici" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Vrednost" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Numerička vrednost koja će biti sačuvana u bazi podataka modela" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Ime stanja" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketa" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Etiketa koja će biti prikazana na korisničkoj strani" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Boja" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Boja koja će biti prikazana na korisničkoj strani" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Model ovog stanja je povezan sa " -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Model mora biti izabran" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Ključ mora biti izabran" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Logički ključ mora biti izabran" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "Ključ mora da se razlikuje od logičkog ključa" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Validna referenca statusa klase mora biti dostavljena" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "Ključ mora biti različit od logičkog ključa referentnog statusa" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "Logički ključ mora biti među logičkim ključevima referentnog statusa" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "Naziv mora biti različit od naziva u statusu reference" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Lista odabira" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Liste odabira" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Ime liste odabira" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Opis liste odabira" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Zaključano" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Da li je ova lista odabira zaključana?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Da li se ova lista odabira može koristiti?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Ekstenzija/dodatak za izvor" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Ekstenzija koja pruža listu odabira" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "String izvora" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Opcioni string koji identifikuje izvor koji se koristi za ovu listu" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Podrazumevani unos" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Podrazumevani unos za ovu listu odabira" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Kreirano" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Datum i vreme kada je ova lista odabira kreirana" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Poslednje ažuriranje" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Datum i vreme kada je ova lista odabira ažurirana" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Unos liste odabira" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Unosi liste odabira" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Lista odabira kojoj ovaj unos pripada" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Vrednost ovog unosa liste odabira" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Naziv ovog unosa liste odabira" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Opis ovog unosa liste odabira" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Da li je unos ove liste odabira aktivan?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Šablon parametra" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parametri ne mogu imati jedinice" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parametri ne mogu imati izbore" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Izbori moraju biti jedinstveni" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Ime šablona parametra mora biti jedinstveno" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Naziv parametra" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Jedinice" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Fizičke jedinice za ovaj parametar" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Opis parametra" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Polje za potvrdu" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Da li je ovaj parametar checkbox?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Izbori" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Lista izbora za ovaj parametar" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Omogućen" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Šablon" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Podaci" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Vrednost parametra" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Vrednost parametra" msgid "Note" msgstr "Beleška" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Opciona beleška" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Skeniranje bar koda" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Podaci bar koda" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Korisnik koji je skenirao bar kod" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Vremenski trag" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Datum i vreme skeniranja bar koda" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "URL krajnja tačka kojaj je obradila bar kod" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Kontekst podataka za skeniranje bar koda" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Odgovor" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Podaci odgovora za skeniranje bar koda" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Rezultat" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Da li je skeniranje bar koda bilo uspešno?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Ključ" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponenta" @@ -2932,7 +2968,7 @@ msgstr "Komponenta" msgid "Parts can be used as sub-components by default" msgstr "Podrazumevano je da se delovi mogu koristi kao pod-komponente" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Može da se kupi" @@ -2940,7 +2976,7 @@ msgstr "Može da se kupi" msgid "Parts are purchaseable by default" msgstr "Podrazumevano je da se delovi mogu kupiti" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Može da se proda" @@ -2952,7 +2988,7 @@ msgstr "podrazumevano je da delovi mogu da se prodaju" msgid "Parts are trackable by default" msgstr "Podrazumevano je da delovi mogu da se prate" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuelni" @@ -4215,8 +4251,8 @@ msgstr "Interni deo je aktivan" msgid "Supplier is Active" msgstr "Dobavljač je aktivan" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Proizvođač" @@ -4406,7 +4442,7 @@ msgstr "Beleške o isporuci za internu upotrebu" msgid "Link to address information (external)" msgstr "Link za adresne informacije (eksterni)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Deo proizvođača" @@ -4424,8 +4460,8 @@ msgstr "Izaberi deo" msgid "Select manufacturer" msgstr "Izaberi proizvođača" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "Broj dela proizvođača" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Dobavljač" msgid "Select supplier" msgstr "Izaberi dobavljača" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Jedinica za držanje dobavljačevih zaliha" @@ -4493,15 +4529,15 @@ msgstr "URL za link dela eksternog dobavljača" msgid "Supplier part description" msgstr "Opis dela dobavljača" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "osnovni trošak" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Pakovanje" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "više" @@ -4542,31 +4578,31 @@ msgstr "Datum poslednjeg ažuriranja podataka o dostupnosti" msgid "Supplier Price Break" msgstr "Smanjenje cene dobavljača" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Naziv kompanije" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Na zalihama" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "Indeks vrsta" msgid "Original row data" msgstr "Originalni podaci vrste" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Greške" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Važeće" @@ -4899,55 +4935,55 @@ msgstr "Lokacija štampača" msgid "Scope the printer to a specific location" msgstr "Podesi štampač na specifičnu lokaciju" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Naziv mašine" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Tip mašine" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Tip mašine" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Drajver" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Drajver koji se koristi za ovu mašinu" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Mašine mogu biti onemogućene" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Drajver dostupan" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Nema grešaka" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Inicijalizovano" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Status mašine" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Mašina" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Mašinska konfiguracija" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Tip konfiguracije" @@ -5066,7 +5102,7 @@ msgstr "Nalog" msgid "Order Complete" msgstr "Nalog završen" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Interni deo" @@ -5124,11 +5160,11 @@ msgstr "Ukupna cena" msgid "Total price for this order" msgstr "Totalna cena ovog naloga" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Valuta naloga" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta za ovaj nalog (ostaviti prazno za podrazumevanu valutu kompanije)" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ciljani datum" @@ -5477,8 +5513,8 @@ msgstr "Provereno od strane" msgid "User who checked this shipment" msgstr "Korisnik koji je proverio ovu isporuku" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Isporuka" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Količina mora biti 1 za serijalizovane stavke sa zaliha" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "ID naloga" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "ID naloga koji će se duplirati" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Kopiraj porudžbine" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Kopiraj stavke porudžbine sa originalnog naloga" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Kopiraj dodatne porudžbine" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Kopiraj dodatne stavke porudžbine sa originalnog naloga" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Kopiraj parametre" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Stavke porudbžine" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Završene porudbžine" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Dupliraj nalog" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Odredi opcije za dupliranje ovog naloga" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Nevažeći ID naloga" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Naziv dobavljača" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Nalog ne može biti otkazan" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "Dozvoli da nalog bude zatvoren sa nepotpunim porudžbinama" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Nalog ima nepotpune stavke porudžbine" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Nalog nije otvoren" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Automatske cene" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Valuta kupovne cene" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Spoj stavke" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Interni broj dela" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Interni naziv dela" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Deo dobavljača mora biti određen" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Nalog za kupovinu mora biti određen" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Nalog za kupovinu mora da se poklapa sa dobavljačem" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Stavka porudbžine" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Izaberi odredišnu lokaciju za primljene stavke" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Unesi šifru ture za nadolazeće stavke sa zaliha" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Datum isteka" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Unesi serijske brojeve za nadolazeće stavke sa zaliha" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Promeni informacije o pakovanju za nadolazeće stavke sa zaliha" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Dodatne beleške za nadolazeće stavke sa zaliha" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Bar kod" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Skeniran bar kod" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Bar kod je već u upotrebi" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Stavke porudžbine moraju biti dostavljene" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Odredišna lokacija mora biti određena" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Isporuke" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Završene isporuke" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Valuta prodajne cene" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Alocirane stavke" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Nisu dostavljeni detalji isporuke" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Stavka porudžbine nije asocirana sa ovim nalogom" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Količina mora biti pozitivna" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Unesi serijske brojeve za alokaciju" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Isporuka je već isporučena" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Isporuka nije povezana sa ovim nalogom" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Nema pronađenih poklapanja za sledeće serijske brojeve" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Sledeći serijski brojevi su nedostupni" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Stavka porudžbine naloga za vraćanje" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za vraćanje" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Stavka porudžbine je već primljena" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "Količina za vraćanje" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Valuta cene porudžbine" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "Ima revizije" msgid "BOM Valid" msgstr "Spisak materijala validan" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Deo sklopa se može testirati" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Deo komponente se može testirati" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Koristi" @@ -6210,7 +6202,7 @@ msgstr "Kategorija dela" msgid "Part Categories" msgstr "Kategorije delova" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Podrazumevana lokacija" @@ -6259,656 +6251,660 @@ msgstr "Podrazumevana vrednost" msgid "Default Parameter Value" msgstr "Podrazumevana vrednost parametra" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Delovi" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Ovaj deo se ne može izbrisati jer je zaključan" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Ovaj deo se ne može izbrisati jer je i dalje aktivan" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Ovaj deo se ne može obrisati jer se koristi u sklopu" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Deo '{self}' ne može biti korišćen u spisku materijala za '{parent}' (recursive)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Deo '{parent}' se koristi u spisku materijala za '{self}' (recursive)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Interni broj dela se mora slagati sa regex šablonom {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Deo ne može biti revizija samog sebe" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Revizije su dozvoljene samo za delove sklopove" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Ne može se izvršiti revizija šablonskog dela" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "Nadređeni deo mora biti vezan sa istim šablonom" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Stavka sa ovim serijskim brojem već postoji" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplirani interni brojevi dela nisu dozvoljeni u podešavanjima dela" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Identična revizija dela već postoji" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Deo sa ovim nazivom, internim brojem dela i revizijom već postoji" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Delovi ne mogu biti dodeljeni strukturnim kategorijama delova!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Naziv dela" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Jeste šablon" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Da li je ovaj deo šablonski deo?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Da li je ovaj deo varijanta drugog dela?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Varijanta od" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Opis dela (opciono)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Ključne reči" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Ključne reči dela da bi se poboljšala vidljivost u rezultatima pretrage" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Kategorija dela" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interni broj dela" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revizija dela ili broj verzije" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revizija" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Da li je ovaj deo revizija drugog dela?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revizija od" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Gde je ova stavka inače skladištena?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Podrazumevani istek" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Vreme isteka (u danima) za stavke sa zaliha ovog dela" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimalne zalihe" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimalni dozvoljen nivo zaliha" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Jedinice mere za ovaj deo" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Da li ovaj deo može biti izgrađen od drugih delova?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Da li ovaj deo može biti korišćen za izradu drugih delova?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Da li ovaj deo ima praćenje za više stavki?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Da li ovaj deo može imati svoje rezultate testa?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Da li ovaj deo može biti kupljen od eksternih dobavljača?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Da li ovaj deo može biti prodat mušterijama?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Da li je ovaj deo aktivan?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Zaključani delovi se ne mogu menjati" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Da li je ovo virtuelni deo, kao na primer softver ili licenca?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "Suma spiska materijala" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Uskladištena suma spiska materijala" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "Spisak materijala proveren od strane" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Spisak materijala proveren datuma" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Korisnik koji je kreirao" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Vlasnik odgovoran za ovaj deo" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Prodaj više" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Valuta korišćena za vršenje proračuna o cenama" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimalna vrednost spiska materijala" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Minimalna vrednost komponenti delova" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maksimalna vrednost spiska materijala" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Maksimalna vrednost komponenti delova" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimalna kupovna vrednost" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Minimalna istorijska kupovna vrednost" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maksimalna kupovna vrednost" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Maksimalna istorijska kupovna vrednost" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimalna interna cena" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Minimalna cena bazirana na internim sniženjima cena" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maksimalna interna cena" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Maksimalna vrednost bazirana na internim sniženjima cena" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Minimalna cena dobavljača" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Minimalna cena dela od eksternih dobavljača" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Maksimalna cena dobavljača" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Maksimalna cena dela od eksternih dobavljača" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Minimalna vrednost varijanti" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Izračunata minimalna vrednost varijanti delova" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Maksimalna vrednost varijanti" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Izračunata maksimalna vrednost varijanti delova" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimalna vrednost" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Promeni minimalnu vrednost" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maksimalna vrednost" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Promeni maksimalnu vrednost" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Ukupna izračunata minimalna vrednost" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Ukupna izračunata maksimalna vrednost" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Minimalna prodajna cena" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Minimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Maksimalna prodajna cena" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Maksimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Minimalna prodajna vrednost" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Minimalna istorijska prodajna cena" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Maksimalna prodajna vrednost" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Maksimalna istorijska prodajna cena" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Deo za popis" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Broj stavki" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Broj individualnih unosa zaliha u vreme popisa" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Ukupne dostupne zalihe za vreme popisa" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Datum" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Datum kada je izvršen popis" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Minimalna vrednost zaliha" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Procenjena minimalna vrednost trenutnih zaliha" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maksimalna vrednost zaliha" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Procenjena maksimalna vrednost trenutnih zaliha" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Smanjenje prodajne cene dela" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Šablon testa dela" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 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:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Naziv testa" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Unesi naziv za ovaj test" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Test ključ" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Pojednostavljen ključ za test" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Opis testa" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Unesi opis za ovaj test" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Da li je ovaj test omogućen?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Neophodno" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Da li je neophodno da ovaj test prođe?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Zahteva vrednost" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Zahteva prilog" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "Validni izbori za ovaj test (razdvojeni zapetom)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 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:4084 +#: part/models.py:4088 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:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Izaberi nadređeni deo" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Pod-deo" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Izaberi deo koji će biti korišćen u spisku materijala" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Količina spiskova materijala za ovu stavku sa spiska materijala" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Ova stavka sa spiska materijala je opciona" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Referenca stavke sa spiska materijala" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Beleške stavki sa spiska materijala" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Suma" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Suma spiska materijala" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Validirano" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Ova stavka sa spiska materijala je validirana" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Biva nasleđeno" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 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:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Zamenski deo mora biti određen" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Zamenska stavka sa spiska materijala" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Nadređena stavka sa spiska materijala" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Zamenski deo" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Deo 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Deo 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Izaberi povezan deo" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Beleška za ovu relaciju" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Identična veza već postoji" @@ -6956,331 +6952,319 @@ msgstr "Valuta kupovine za ovu stavku sa zaliha" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Originalni deo" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Izaberi originalni deo za duplikaciju" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kopiraj sliku" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Kopiraj sliku sa originalnog dela" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Kopiraj spisak materijala" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Kopiraj spisak materijala sa originalnog dela" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Kopiraj parametarske podatke sa originalnog dela" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Kopiraj beleške" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Kopiraj beleške sa originalnog dela" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Inicijalna količina zaliha" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Inicijalna lokacija zaliha" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Broj dela proizvođača" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Izabrana kompanija nije validan dobavljač" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Izabrana kompanija nije validan proizvođač" -#: part/serializers.py:563 +#: part/serializers.py:503 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:570 +#: part/serializers.py:510 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:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Naziv kategorije" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Izrađivanje" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Stavke sa zaliha" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Revizije" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Ukupne zalihe" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Nealocirane zalihe" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Varijante zaliha" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Dupliraj deo" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Kopiraj inicijalne podatke od drugog dela" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kopiraj sliku" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Kopiraj sliku sa originalnog dela" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Kopiraj spisak materijala" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Kopiraj spisak materijala sa originalnog dela" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Kopiraj beleške" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Kopiraj beleške sa originalnog dela" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Početne zalihe" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Kreiraj deo sa početnom količinom zaliha" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Informacije o dobavljaču" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Kopiraj parametre kategorije" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Postojeća slika" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Ime fajla postojeće slike dela" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Fajl sa slikom ne postoji" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Validiraj ceo spisak materijala" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Može se izgraditi" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Minimalna cena" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Izmeni izračunatu vrednost za minimalnu cenu" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Minimalna valuta cene" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Maksimalna cena" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Izmeni izračunatu vrednost maksimalne cene" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Maksimalna valuta cene" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Ažuriraj" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Ažuriraj cene za ovaj deo" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Minimalna cena ne sme biti veća od maksimalne cene" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Maksimalna cena ne sme biti manja od minimalne cene" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Izaberi nadređeni sklop" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Izaberi komponentu dela" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "Izaberi deo sa kog će se kopirati spisak materijala" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Ukloni postojeće podatke" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Uključi nasleđeno" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Preskoči nevažeće vrste" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Kopiraj zamenske delove" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Pruža ugrađenu podršku za bar kodove" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Kratki prefiks bar koda" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Prilagođava prefiks koji se koristi za kratke bar kodove, može biti korisno u okruženjima sa više instanci aplikacije" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" 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:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Odredišna lokacija zaliha" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Beleške transakcija zaliha" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index 7f87c44be3..23d65a3eeb 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -89,7 +89,7 @@ msgstr "Kunde inte konvertera {original} till {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" @@ -97,16 +97,16 @@ msgstr "Ogiltigt antal angivet" msgid "Error details can be found in the admin panel" msgstr "Information om felet finns under Error i adminpanelen" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Ange datum" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referensnumret är för stort" msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Beskrivning" msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Sökväg" @@ -334,7 +334,7 @@ msgstr "Serverfel" msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Bild" msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Kopiera parametrar" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabiska" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Orderstatus" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Föregående tillverkning" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Inkludera varianter" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Inkludera varianter" msgid "Part" msgstr "Del" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategori" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Tillverkningen måste avbrytas innan den kan tas bort" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Valfri" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Spårad" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Testbar" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Allokerad" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Konsumerad" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Byggorder" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Plats" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Byggordrar" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Tillverknings order referens" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Tillverknings order referens" msgid "Reference" msgstr "Referens" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Välj del att tillverka" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Försäljningsorderreferens" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Källa Plats" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Välj plats att ta lager från för detta bygge (lämna tomt för att ta från någon lagerplats)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Destinationsplats" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Välj plats där de färdiga objekten kommer att lagras" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Tillverkat antal" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Antal lagerobjekt att bygga" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Slutförda objekt" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Antal lagerposter som har slutförts" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Tillverknings status" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Tillverkning statuskod" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Skapad" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Datum för slutförande" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Tillverkningen kommer att förfallas efter detta datum." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Slutförandedatum" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "slutfört av" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Utfärdad av" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Användare som utfärdade denna tillverknings order" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarig" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Extern länk" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Länk till extern URL" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Projektkod" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Bygg objekt" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Bygg objekt" msgid "Quantity" msgstr "Antal" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Installera till" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Delnamn" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Ange serienummer för att tillverkade produkter" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "En lista över tillverkade produkter måste anges" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Lagerplats för skrotade produkter" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Ignorera alla lagerallokeringar för skrotade produkter" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Plats för färdiga produkter" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Slutför utfall om lager inte har tilldelats fullt ut" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Ta bort ofullständiga produkter" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Ta bort eventuella produkter som inte har slutförts" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Tillverknings ordern är ofullständig" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Spårbar" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Uppdaterad" @@ -1608,9 +1644,9 @@ msgstr "Unik projektkod" msgid "Project description" msgstr "Projektbeskrivning" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Användare" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Pris" @@ -1679,560 +1715,560 @@ msgstr "Pris" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Hemlig" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Meddelande-ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Värd" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Id" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Titel" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Länk" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Sammanfattning" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Läs" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Bildfil" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Definition" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Bilaga" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Saknad fil" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Extern länk saknas" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Välj fil att bifoga" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Uppladdningsdatum" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Filstorlek" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logisk nyckel" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Värde" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etikett" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Färg" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Modell" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Låst" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Källsträng" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Skapad" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Senast uppdaterad" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Parametermall" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Kryssruta" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Val" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Aktiverad" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Mall" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Data" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Streckkodsdata" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Tidsstämpel" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Sammanhang" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Svar" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Resultat" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Ett fel inträffade" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "E-postmeddelande" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Bekräftad" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Inget svar" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "Tråd-ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Tråd" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "E-posttrådar" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Nyckel" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Komponent" @@ -2932,7 +2968,7 @@ msgstr "Komponent" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Virtuell" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Tillverkare" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "Välj del" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "MPN" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Leverantör" msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Företagsnamn" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "I lager" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "Radindex" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Fel" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Giltig" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Namn på maskin" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Maskintyp" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Typ av maskin" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Inga fel" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Maskin" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Konfigurationstyp" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Intern del" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "Startdatum" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldatum" @@ -5477,8 +5513,8 @@ msgstr "Kontrollerad av" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Kopiera parametrar" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Använder" @@ -6210,7 +6202,7 @@ msgstr "Delkategori" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "Standardvärde" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Artiklar" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Delnamn" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Är mall" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Nyckelord" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revision" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Datum" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Validerad" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Originaldel" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Kopiera bild" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Kopiera test" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Kategorinamn" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Revisioner" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Kopiera bild" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Kopiera test" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Hoppa över ogiltiga rader" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index c9d91f1cbb..e90a0125a7 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -89,7 +89,7 @@ msgstr "" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" @@ -97,16 +97,16 @@ msgstr "ปริมาณสินค้าไม่ถูกต้อง" msgid "Error details can be found in the admin panel" msgstr "" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "ป้อนวันที่" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "คำอธิบาย" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "" @@ -334,7 +334,7 @@ msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเ msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "" msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "สถานที่" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "ออกโดย" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "ผู้ใช้งาน" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "" @@ -1679,560 +1715,560 @@ msgstr "" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "ลิงก์" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "ไฟล์แนบ" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "ไม่พบไฟล์" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "เลือกไฟล์ที่ต้องการแนบ" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "ความคิดเห็น" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "" @@ -2932,7 +2968,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "" @@ -4424,8 +4460,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "ชิ้นส่วน" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index c6fc2397e3..ac1370f71c 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -89,7 +89,7 @@ msgstr "{original} birimi {unit} birimine dönüştürülemedi" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" @@ -97,16 +97,16 @@ msgstr "Geçersiz veri sağlandı" msgid "Error details can be found in the admin panel" msgstr "Hata ayrıntıları yönetici panelinde bulunabilir" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Tarih giriniz" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Geçersiz ondalık değer" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Referans sayısı çok fazla" msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Açıklama" msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Yol" @@ -334,7 +334,7 @@ msgstr "Sunucu Hatası" msgid "An error has been logged by the server." msgstr "Bir hafta sunucu tarafından kayıt edildi." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Görsel" msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Mevcut seçeneklerden para birimini seçin" @@ -373,6 +373,46 @@ msgstr "İçerik türü bulunamadı" msgid "Content type does not match required mixin class" msgstr "İçerik türü gerekli mixin sınıfı ile eşleşmemektedir" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Parametreleri Kopyala" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "Satırları Kopyala" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "Satırları orijinal siparişten kopyala" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "Ek Kalemleri Kopyala" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "Orijinal siparişten ek kalemleri kopyala" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arapça" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Sipariş Durumu" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "Varyantları Dahil Et" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "Varyantları Dahil Et" msgid "Part" msgstr "Parça" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Kategori" @@ -661,125 +701,126 @@ msgstr "Ağacı Hariç Tut" msgid "Build must be cancelled before it can be deleted" msgstr "Üretim silinemeden önce iptal edilmelidir" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "İsteğe Bağlı" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Montaj" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "İzlenen" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Test Edilebilir" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "Sipariş Açık" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Tahsis Edildi" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Tüketildi" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Siparişte" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "Üretim bulunamadı" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Üretim Emri" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Konum" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "Çıktı" -#: build/api.py:1107 +#: build/api.py:1120 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:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Üretim Emirleri" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Montaj BOM listesi henüz doğrulanmadı" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Pasif bir parça için üretim emri oluşturulamaz" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Kilidi açılmış bir parça için üretim emri oluşturulamaz" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Harici üretim emirleri yalnızca satın alınabilir parçalar için yerine getirilebilir" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Sorumlu kullanıcı veya grup belirtilmelidir" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Üretim emri parçası değiştirilemez" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "Hedef tarih başlangıç tarihinden sonra olmalıdır" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Üretim Emri Referansı" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Üretim Emri Referansı" msgid "Reference" msgstr "Referans" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Üretimin kısa açıklaması (isteğe bağlı)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "Bu üretimin tahsis edildiği üretim emri" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Üretilecek parçayı seçin" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:297 +#: build/models.py:294 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:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Bu üretim için stok alınacak konumu seçin (herhangi bir stok konumundan amak için boş bırakın)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "Harici Üretim" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "Bu üretim emri harici olarak tamamlanmıştır" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Üretim Miktarı" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Üretilecek stok kalemlerinin sayısı" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Üretim Durumu" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Üretim durum kodu" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "Bu üretim çıktısının parti kodu" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "Üretim başlangıç tarihi" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Üretimin tamamlanması için hedef tarih. Bu tarihten sonra üretim gecikmiş olacak." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Düzenleyen" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "Bu üretim emrini düzenleyen kullanıcı" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "Bu üretim emrinden sorumlu kullanıcı veya grup" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Üretim Önceliği" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Bu üretim emrinin önceliği" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Proje Kodu" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Bu üretim emri için proje kodu" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "Açık alt üretim işlemleri varken üretim emri tamamlanamaz" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "Eksik çıktılar varken üretim emri tamamlanamaz" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Hiçbir üretim çıktısı belirtilmedi" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Üretim çıktısı zaten tamamlanmış" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "Üretim çıktısı, üretim emri ile eşleşmiyor" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Miktar sıfırdan büyük olmalıdır" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "Miktar çıktı miktarından büyük olamaz" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "Üretim çıktısı tüm gerekli testleri geçmedi" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "Tahsis edilen stok kalemleri hâlâ üretimde" -#: build/models.py:1151 +#: build/models.py:1136 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:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Üretim Emri Satırı" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Üretim nesnesi" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Üretim nesnesi" msgid "Quantity" msgstr "Miktar" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Üretim emri için gereken miktar" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "Tüketilen Stok Miktarı" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "Seçili stok kalemi BOM satırı ile eşleşmiyor" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "Üretime tahsis edilecek stok miktarı" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Kur" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Üretim Seviyesi" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Parça Adı" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Üretim Çıktısı" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "Üretim çıktısı üst üretim ile eşleşmiyor" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "Çıktı parçası üretim emri parçası ile eşleşmiyor" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "Bu üretim çıktısı zaten tamamlandı" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "Bu üretim çıktısı tam tahsis edilmedi" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Üretim çıktısının miktarını girin" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "İzlenebilir parçalar için tamsayı miktar gerekir" -#: build/serializers.py:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "Üretim çıktıları için seri numaraları girin" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Üretim çıktısı için stok konumu" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Seri Numaralarını Otomatik Tahsis Et" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "Eşleşen seri numaralı gerekli kalemleri otomatik tahsis et" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "Şu seri numaraları zaten varlar veya geçersizler" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "Bir üretim çıktıları listesi sağlanmalıdır" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için stok konumu" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Ayırmaları İptal Et" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için yapılan tüm stok tahsislerini iptal et" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Üretim çıktı(larını) hurdaya ayırma nedeni" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Tamamlanan üretim çıktıları içi konum" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Eksik Tahsisi Kabul Et" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "Stok henüz tamamen tahsis edilmemişse çıktıları tamamla" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Tahsis Edilen Stoku Tüket" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Eksik Çıktıları Kaldır" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "Henüz tamamlanmamış tüm üretim çıktılarını sil" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "İzin verilmedi" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "Bu üretim emri tarafından tüketildi olarak kabul et" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "Bu üretim emrini tamamlamadan önce tahsisi kaldır" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Aşırı Tahsis Edilmiş Stok" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "Bazı stok kalemleri aşırı tahsis edilmiştir" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Tahsis Edilmeyeni Kabul Et" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Eksik Kabul et" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "Gereken üretim miktarı tamamlanmadı" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "Üretim emrinin açık alt üretim emirleri var" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "Üretim emri üretim durumunda olmalıdır" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "Üretim emrinde eksik çıktılar var" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Üretim Satırı" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Üretim çıktısı" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "Üretim çıktısı aynı üretimi göstermelidir" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Üretim Satırı" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Kalem stokta olmalıdır" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Mevcut miktar ({q}) aşıldı" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Tahsis ögeleri belirtilmelidir" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Konumu Hariç Tut" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "Stok kalemlerini bu seçili konumdan hariç tut" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Birbirinin Yerine Kullanılabilir Stok" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Birden fazla konumdaki stok kalemleri birbirinin yerine kullanılabilir" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Muadil Stok" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Muadil parçaların tahsis edilmesine izin ver" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "İsteğe Bağlı Ögeler" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "İsteğe bağlı BOM kalemlerini üretim emrine tahsis et" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "Tüm Ögeler" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "Takip edilmeyen kalemler" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "Takipli Kalemler" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "Kalem Türü" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "Otomatik tahsis edilecek ürün türünü seçin" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "Stok Önceliği" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "Eşleşen stok kalemlerinin tüketilmesinde tercih edilen sıra" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "Üretim Satırları" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "Tahsisatı şu üretim satırlarına sınırla (tüm satırlara tahsis etmek için boş bırakın)" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "ML Referansı" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "BOM Parça ID" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "ML Parça Adı" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "Kur" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "Yap" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Tedarikçi Parçası" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Tahsis Edilen Miktar" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Üretim Referansı" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Parça Kategorisi Adı" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Takip Edilebilir" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Devralınmış" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "ML Ögesi" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Üretimde" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "Üretim için Planlandı" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Harici Stok" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Mevcut Stok" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Mevcut Yedek Stok" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Mevcut Varyant Stok" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "Tüketilen miktar tahsis edilen miktarı aşıyor" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "Stok tüketimi için isteğe bağlı notlar" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "Üretim kalemi doğru üretim emrini göstermelidir" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "Üretim kalemi tahsisini yinele" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "Üretim satırı doğru üretim emrini göstermelidir" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "Üretim satırı tahsisini yinele" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "En az bir kalem veya satır sağlanmalıdır" @@ -1584,7 +1620,7 @@ msgstr "Etiketler" msgid "Project Code Label" msgstr "Proje Kodu Etiketi" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Güncellendi" @@ -1608,9 +1644,9 @@ msgstr "Eşsiz proje kodu" msgid "Project description" msgstr "Proje açıklaması" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "Değer doğrulama kontrollerini geçemiyor" msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Kullanıcı" msgid "Price break quantity" msgstr "Fiyat kademesi miktarı" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Fiyat" @@ -1679,560 +1715,560 @@ msgstr "Fiyat" msgid "Unit price at specified quantity" msgstr "Belirtilen miktardaki birim fiyat" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Bitiş Noktası" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Bu web kancasının alındığı uç nokta" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Bu web kancası için ad" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Bu web kancası aktif mi" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Token" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Erişim için belirteç" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Gizli" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "HMAC için paylaşılan gizli bilgi" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Mesaj ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Bu mesaj için benzersiz tanımlayıcı" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Sağlayıcı" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Bu mesajın alındığı ana bilgisayar" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Başlık" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Bu mesajın başlığı" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Gövde" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Bu mesajın gövdesi" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Bu mesajın alındığı uç nokta" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Üzerinde çalışıldı" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Bu mesajdaki iş bitirildi mi?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Kimlik" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Başlık" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Bağlantı" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Yayınlandı" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Yazar" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Özet" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Oku" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Haberi okudunuz mu?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Görsel dosyası" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "Bu görsel için hedef model türü" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "Bu görsel için hedef model ID" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "Özel Birim" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "Birim simgesi benzersiz olmalıdır" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Birim adı geçerli bir tanımlayıcı olmalıdır" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Birim adı" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Sembol" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "İsteğe bağlı birim simgesi" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Tanımlama" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Birim tanımlaması" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Ek" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Eksik dosya" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "Yeniden adlandırmak için dosya eklenmemiş" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "Dosya adı boş olamaz" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "Geçersiz dosya adı" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "Dosya uzantısı değiştirilemiyor" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "Bu adda bir dosya zaten var" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "Yeniden adlandırılan dosyayı kaydetme başarısız oldu" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "Model türü" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "Görsel için hedef model türü" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "Küçük görsel" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "Bu ek için küçük görsel" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Yorum" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "Ek yorumu" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Yükleme tarihi" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Dosyanın yüklendiği tarih" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "Görsel mi" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "Bu ek geçerli bir görsel dosyası ise true" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Dosya Boyutu" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Bayt cinsinden dosya boyutu" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "Ek için belirtilen model türü geçersiz" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "Özel Durum" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "Özel Durumlar" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "Referans Durum Seti" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "Bu özel durum ile genişletilen durum seti" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Mantıksal anahtar" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "İş mantığında bu özel duruma eşit olan durum mantıksal anahtarı" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Değer" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "Modeller veritabanına kaydedilecek sayısal değer" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "Durumun adı" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Etiket" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek etiket" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Renk" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek renk" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Model" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "Bu durumun ilişkilendirildiği model" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "Model seçilmelidir" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "Anahtar Seçilmelidir" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "Mantıksal anahtar seçilmelidir" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "Anahtar, mantık anahtarından farklı olmalıdır" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "Geçerli bir referans durum sınıfı sağlanmalıdır" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "Anahtar, referans durumunun mantık anahtarlarından farklı olmalıdır" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "Mantıksal anahtar, referans durumunun mantıksal anahtarları içinde olmalıdır" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "İsim, referans durumunun isimlerinden farklı olmalıdır" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Seçim Listesi" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "Seçim Listeleri" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "Seçim listesinin adı" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "Seçim listesinin açıklaması" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Kilitli" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "Bu seçim listesi kilitli mi?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "Bu seçim listesi kullanılabilir mi?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "Kaynak Eklentisi" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "Seçim listesini sağlayan eklenti" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "Kaynak Dize" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "Bu liste için kullanılan kaynağı belirten isteğe bağlı dize" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "Varsayılan Girdi" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "Bu seçim listesi için varsayılan girdi" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Oluşturuldu" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "Seçim listesinin oluşturulduğu tarih ve saat" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Son Güncelleme" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "Seçim listesinin son güncellendiği tarih ve saat" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "Seçim Listesi Girdisi" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "Seçim Listesi Girişleri" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "Bu girdinin ait olduğu seçim listesi" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "Seçim listesi girdisinin değeri" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "Seçim listesi girdisi için etiket" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "Seçim listesi girdisinin açıklaması" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "Bu seçim listesi girdisi aktif mi?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "Parametre Şablonları" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Onay kutusu parametrelerinin birimleri olamaz" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "Onay kutusu parametrelerinin seçenekleri olamaz" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Seçenekler eşsiz olmalıdır" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "Bu parametre şablonu için hedef modeli türü" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Parametre Adı" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Birim" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Bu parametre için fiziksel birimler" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Parametre açıklaması" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Onay kutusu" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Bu parametre bir onay kutusu mu?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Seçenekler" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Bu parametre için geçerli seçenekler (virgül ile ayrılmış)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "Bu parametre için seçim listesi" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Etkin" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "Bu parametre şablonu etkin mi?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "Parametre" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "Parametreler" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "Parametre için belirtilen model türü geçersiz" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "Model ID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "Bu parametre için hedef modelin ID'si" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Şablon" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "Parametre şablonu" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Veri" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Parametre Değeri" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Parametre Değeri" msgid "Note" msgstr "Not" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "İsteğe bağlı not alanı" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "Barkod Taraması" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "Barkod verisi" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "Barkodu taratan kullanıcı" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "Zaman damgası" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "Barkod taramasının tarihi ve saati" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "Barkodu işleyen URL uç noktası" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Bağlam" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "Barkod taraması için bağlam verisi" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "Yanıt" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "Barkod taramasından gelen yanıt verisi" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Sonuç" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "Barkod taraması başarılı mıydı?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "Bir hata oluştu" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "NVE-ER: E-posta günlüğünün silinmesi korumalı. Silmeye izin vermek için INVENTREE_PROTECT_EMAIL_LOG ayarını False olarak ayarlayın." -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "E-posta İletisi" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "E-posta İletileri" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "Duyuruldu" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "Gönderildi" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "Başarısız" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "Teslim edildi" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "Onaylandı" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "Gelen" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "Giden" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "Yanıt Yok" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "Teslimat Takibi" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "Okumayı Takip Et" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "Tıklamayı Takip Et" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "Bu ileti için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "Konu Kimliği" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Bu ileti konusu için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "Konu" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "Bu mesaja bağlı konu" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "Öncelik" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "E-Posta Konusu" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "E-posta Konuları" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Anahtar" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "Bu konu için benzersiz anahtar (konuyu tanımlamak için kullanılır)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "Bu konu için benzersiz tanımlayıcı" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "Dahili Olarak Başlatıldı" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "Bu konu dahili olarak mı başlatıldı?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "Konunun oluşturulduğu tarih ve saat" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "Konunun son güncellendiği tarih ve saat" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Bileşen" @@ -2932,7 +2968,7 @@ msgstr "Bileşen" msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Satın Alınabilir" @@ -2940,7 +2976,7 @@ msgstr "Satın Alınabilir" msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Satılabilir" @@ -2952,7 +2988,7 @@ msgstr "Parçalar varsayılan olarak satılabilir" msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Sanal" @@ -4215,8 +4251,8 @@ msgstr "Dahili Parça Aktif" msgid "Supplier is Active" msgstr "Tedarikçi Aktif" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Üretici" @@ -4406,7 +4442,7 @@ msgstr "Dahili kullanım için sevkiyat notları" msgid "Link to address information (external)" msgstr "Adres bilgisine bağlantı (harici)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Üretici Parçası" @@ -4424,8 +4460,8 @@ msgstr "Parça seçin" msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "ÜPN" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Tedarikçi" msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Tedarikçi stok kodu" @@ -4493,15 +4529,15 @@ 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:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum ücret (örneğin stoklama ücreti)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Paketleme" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "çoklu" @@ -4542,31 +4578,31 @@ msgstr "Temin edilebilirlik verisinin güncellendiği son tarih" msgid "Supplier Price Break" msgstr "Tedarikçi Fiyat Kademesi" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Bu tedarikçi için kullanılan varsayılan para birimi" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "Şirket Adı" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Stokta" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "Fiyat Kademeleri" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "Güzel Ad" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "Veri dışa aktarma sırasında hata oluştu" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "Veri dışa aktarma eklentisi yanlış veri biçimi döndürdü" @@ -4735,11 +4771,11 @@ msgstr "Satır İndeksi" msgid "Original row data" msgstr "Orijinal satır verisi" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "Hatalar" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Geçerli" @@ -4899,55 +4935,55 @@ msgstr "Yazıcı Konumu" msgid "Scope the printer to a specific location" msgstr "Yazıcıyı belirli bir konuma ayarlayın" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "Makinenin adı" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "Makine Türü" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "Makinenin türü" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "Sürücü" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "Makine için kullanılan sürücü" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "Makineler devre dışı bırakılabilir" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "Sürücü mevcut" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "Hata yok" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "Başlatıldı" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "Makine durumu" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "Makine" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "Makine Yapılandırması" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "Yapılandırma türü" @@ -5066,7 +5102,7 @@ msgstr "Sipariş" msgid "Order Complete" msgstr "Sipariş Tamamlandı" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Dahili Parça" @@ -5124,11 +5160,11 @@ msgstr "Toplam Fiyat" msgid "Total price for this order" msgstr "Bu sipariş için toplam fiyat" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Sipariş Para Birimi" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Bu sipariş için para birimi (şirket varsayılanını kullanmak için boş bırakın)" @@ -5168,7 +5204,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:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Hedeflenen tarih" @@ -5477,8 +5513,8 @@ msgstr "Kontrol Eden" msgid "User who checked this shipment" msgstr "Bu sevkiyatı kontrol eden kullanıcılar" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sevkiyat" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar 1 olmalıdır" @@ -5685,39 +5721,7 @@ msgstr "aktarılan miktar" msgid "Transfer Order Allocation" msgstr "Transfer Emri Tahsisatı" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "Sipariş ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "Kopyası oluşturulacak siparişin ID'si" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "Satırları Kopyala" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "Satırları orijinal siparişten kopyala" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "Ek Kalemleri Kopyala" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "Orijinal siparişten ek kalemleri kopyala" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Parametreleri Kopyala" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "Parametreleri orijinal siparişten kopyala" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "Parametreleri orijinal siparişten kopyala" msgid "Line Items" msgstr "Satırlar" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "Tamamlanan Satırlar" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "Özel Durum Anahtarı" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "Bu mantıksal değer için sipariş durumunu özel bir değere güncelle" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "Siparişin Kopyasını Oluştur" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "Bu siparişin kopyasını oluşturmak için seçenekleri belirtin" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "Özel durum anahtarı bir tamsayı olmalıdır" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "Geçersiz özel durum anahtarı" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "Bu sipariş durumu için geçersiz özel durum anahtarı" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "Geçersiz sipariş ID" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Tedarikçi Adı" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Sipariş iptal edilemez" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "Siparişin eksik satırları var" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Sipariş açık değil" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "Otomatik Fiyatlandırma" -#: order/serializers.py:719 +#: order/serializers.py:680 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:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Satın alma fiyatı para birimi" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "Kalemleri Birleştir" -#: order/serializers.py:769 +#: order/serializers.py:730 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:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "SKU" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Dahili Parça Numarası" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "Dahili Parça Adı" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Tedarikçi parçası belirtilmeli" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Satın alma siparişi belirtilmeli" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Tedarikçi satın alma siparişi ile eşleşmelidir" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Satın alma siparişi tedarikçi ile eşleşmelidir" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Satır" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Teslim alınan kalemler için varış konumunu seçin" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Gelen stok kalemleri için parti numarası girin" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Raf Ömrü Tarihi" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "Gelen stok kalemleri için raf ömrü tarihi girin" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Gelen stok kalemlerinin seri numaralarını girin" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "Gelen stok kalemlerinin paketleme bilgilerini geçersiz kıl" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "Gelen stok kalemleri için ek not" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Barkod" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Taranan barkod" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Barkod zaten kullanımda" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Satırlar sağlanmalıdır" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Hedef konum belirtilmelidir" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Sağlanan barkod değerleri benzersiz olmalıdır" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "Sevkiyatlar" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Tamamlanan Sevkiyatlar" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Satış para birimi" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Sevkiyat bilgileri sağlanmadı" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "Ürün kalemi bu siparişle ilişkilendirilmemiştir" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Miktar pozitif olmalıdır" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "Stok kalemi gerekli tüm testleri geçmedi" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Tahsis edilecek seri numaralarını girin" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Sevkiyat zaten sevk edildi" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "Sevkiyat bu sipariş ile ilişkilendirilmemiştir" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Şu seri numaraları için bir eşleşme bulunamadı" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "Şu seri numaraları mevcut değildir" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "Kalemlerin alınacağı stok konumu (herhangi bir konumdan almak için boş bırakın)" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "Stok kalemlerini bu konumdan hariç tut" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "Tahsisleri bu sevkiyata ata" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "Tek bir satır kalemini karşılamak için birden fazla konumdan mal alınmasına izin ver" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "Seri Numaralı Stok" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "Otomatik tahsise seri numaralı stok kalemlerinin dahil edilip edilmediğini kontrol et" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "Tahsisatı şu satırlara sınırla (tüm satırlara tahsis etmek için boş bırakın)" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "Satır bu emre ait değil" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "İade siparişi kalemi" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "Ürün kalemi iade siparişi ile eşleşmiyor" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Ürün kalemi zaten teslim alındı" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "İade olacak miktar" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Satır para birimi" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "Üretimin eksik tahsisler ile tamamlanmasına izin ver" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "Üretimin eksik tahsisleri var" @@ -6145,59 +6137,59 @@ msgstr "Revizyonu Olanlar" msgid "BOM Valid" msgstr "BOM Geçerli" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "Kategorileri Kademele" -#: part/api.py:996 +#: part/api.py:998 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:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Sayısal kategori ID veya 'null' sabitine göre filtrele" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "Montaj parçası etkin" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "Montaj parçası takip edilebilir" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "Montaj test edilebilir" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "Montaj parçası kilitlidir" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "Bileşen etkin" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "Bileşen takip edilebilir" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "Bileşen test edilebilir" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "Bileşen bir montaj parçası" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "Bileşen sanal" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "Stok mevcut" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "Kullanımlar" @@ -6210,7 +6202,7 @@ msgstr "Parça Kategorisi" msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Varsayılan Konum" @@ -6259,656 +6251,660 @@ msgstr "Varsayılan Değer" msgid "Default Parameter Value" msgstr "Varsayılan Parametre Değeri" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Parçalar" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Kilitli bir parçanın parametreleri silinemez" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Kilitli bir parçanın parametreleri değiştirilemez" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Bu parça kilitli olduğu için silinemez" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Bu parça hala aktif olduğundan silinemez" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Bu parça bir montajda kullanıldığından silinemez" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "'{self}' parçası, '{parent}' için BOM'da kullanılamaz (yinelemeli)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "'{parent}' parçası, '{self}' için BOM'da kullanılır (yinelemeli)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN, düzenli ifade kalıbı {pattern} ile eşleşmelidir" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "Parça, kendisinin revizyonu olamaz" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "Bir revizyon olarak işaretlenen bir parçaya revizyon kodu belirtilmelidir" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "Revizyonlara yalnızca montaj parçaları için izin verilir" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "Bir şablon parçanın revizyonu yapılamaz" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "Üst parça aynı şablonu göstermelidir" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Bu seri numarasına sahip stok kalemi zaten var" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Kopyası oluşturulan parça revizyonu zaten var." -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Bu Ad, IPN ve Revizyona sahip parça zaten var." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Parçalar yapısal parça kategorilerine atanamaz!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Parça adı" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın varyantı mı?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Şunun Varyantı" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Anahtar kelimeler" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Arama sonuçlarında görünürlüğü artırmak için parça anahtar kelimeleri" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Parça kategorisi" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "DPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Revizyon" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Bu parça başka bir parçanın revizyonu mu?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Şunun Revizyonu" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Bu kalem normalde nerede depolanır?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Varsayılan Raf Ömrü" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Bu parçanın stok kalemleri için raf ömrü süresi (gün olarak)" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Minimum Stok" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "İzin verilen minimum stok düzeyi" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "Maksimum Stok" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "İzin verilen maksimum stok düzeyi" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Bu parça için ölçü birimleri" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan üretilebilir mi?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Bu parça diğer parçaların üretiminde kullanılabilir mi?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Bu parçanın benzersiz kalemler için takip özelliği var mı?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "Bu parçanın test sonuçları kaydedilebilir mi?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "Kilitli parçalar değiştirilemez" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Bu, yazılım ürünü veya lisans gibi sanal bir parça mı?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "BOM Doğrulandı" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "Bu parçanın BOM'u geçerli mi?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "BOM sağlama toplamı" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Saklanan BOM sağlama toplamı" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOM'u kontrol eden" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "BOM kontrol tarihi" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "Bu parçanın sorumlu sahibi" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Birden fazla sat" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "Fiyat hesaplamalarını önbelleğe almak için kullanılan para birimi" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Minimum BOM Maliyeti" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Bileşenlerin minimum maliyeti" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Maksimum BOM Maliyeti" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Bileşenlerin maksimum maliyeti" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Minimum Satın Alma Maliyeti" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Minimum tarihsel satın alma maliyeti" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Maksimum Satın Alma Maliyeti" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "Maksimum tarihsel satın alma maliyeti" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Minimum Dahili Fiyat" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı minimum maliyet" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Maksimum Dahili Fiyat" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı maksimum maliyet" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Minimum Tedarikçi Fiyatı" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "Parça için minimum dış tedarikçi fiyatı" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Maksimum Tedarikçi Fiyatı" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "Parça için maksimum dış tedarikçi fiyatı" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Minimum Varyant Maliyeti" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "Varyant parçaların hesaplanan minimum maliyeti" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Maksimum Varyant Maliyeti" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "Varyant parçaların hesaplanan maksimum maliyeti" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Minimum Maliyet" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Minimum maliyeti geçersiz kıl" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Maksimum Maliyet" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Maksimum maliyeti geçersiz kıl" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Hesaplanan genel minimum maliyet" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Hesaplanan genel maksimum maliyet" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Minimum Satış Fiyatı" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı minimum satış fiyatı" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Maksimum Satış Fiyatı" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı maksimum satış fiyatı" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Minimum Satış Maliyeti" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Minimum tarihsel satış fiyatı" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Maksimum Satış Maliyeti" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Maksimum tarihsel satış fiyatı" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Stok sayımı için parça" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Kalem Sayısı" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "Sayım anındaki tekil stok kaydı sayısı" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "Sayım anındaki toplam mevcut stok" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Tarih" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Stok sayımının yapıldığı tarih" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Minimum Stok Maliyeti" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "Mevcut stokun tahmini minimum maliyeti" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Maksimum Stok Maliyeti" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "Mevcut stokun tahmini maksimum maliyeti" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "Parça Satış Fiyat Kademesi" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "Parça Test Şablonu" -#: part/models.py:3714 +#: part/models.py:3718 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:3746 +#: part/models.py:3750 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:3760 +#: part/models.py:3764 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:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Test için bir ad girin" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "Test Anahtarı" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "Test için basitleştirilmiş anahtar" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Bu test için açıklama girin" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "Bu test etkinleştirildi mi?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Gerekli" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Değer Gerektirir" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Ek Gerektirir" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 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:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "Geçersiz miktar - parça için bir birim belirtilmedi" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "Miktar sıfır veya daha büyük olmalıdır" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM kalemi değiştirilemez - montaj kilitlidir" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM kalemi değiştirilemez - varyant montajı kilitlidir" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Üst parçayı seçin" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Alt parça" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "BOM'da kullanılacak parçayı seçin" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "Miktar" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "Bir parçayı üretmek için tüketilen alt parçanın miktarı" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Bu BOM kalemi için BOM miktarı" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Bu BOM kalemi isteğe bağlıdır" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "Hazırlık Payı" -#: part/models.py:4145 +#: part/models.py:4149 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:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "Fire" -#: part/models.py:4155 +#: part/models.py:4159 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:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "Kat Yuvarlama" -#: part/models.py:4168 +#: part/models.py:4172 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:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "BOM kalemi referansı" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "BOM kalemi notları" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Sağlama Toplamı" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "BOM satırı sağlama toplamı" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Doğrulandı" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Bu BOM kalemi doğrulandı" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Devralınır" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "İzlenebilir parçalar için miktar tamsayı olmalıdır" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Alt parça belirtilmelidir" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "BOM Kalemi Muadili" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Üst BOM kalemi" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Muadil parça" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Parça 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Parça 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "İlgili Parçayı Seçin" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "Bu ilişki için not" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Kopyalanan ilişki zaten mevcut" @@ -6956,331 +6952,319 @@ msgstr "Bu stok kaleminin alış para birimi" msgid "File is not an image" msgstr "Dosya bir görsel değil" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Orijinal Parça" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Kopyalanacak orijinal parçayı seçin" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Görseli Kopyala" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Orijinal parçadan görseli kopyala" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "BOM'u Kopyala" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "Orijinal parçadan ürün ağacını kopyala" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "Orijinal parçadan parametreleri kopyala" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "Notları Kopyala" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Orijinal parçadan notları kopyala" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "Testleri Kopyala" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "Orijinal parçadan test şablonlarını kopyala" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Başlangıç Stok Miktarı" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Başlangıç Stok Konumu" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "Bu parça için başlangıç stok konumunu belirtin" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Tedarikçiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "Üreticiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Üretici parça numarası" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "Seçili şirket geçerli bir tedarikçi değildir" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "Seçili şirket geçerli bir üretici değildir" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "Bu MPN ile eşleşen üretici parçası zaten mevcut" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "Bu SKU ile tedarikçi parçası zaten mevcut" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Kategori Adı" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Üretiliyor" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "Bu parçanın şu anda üretimde olan miktarı" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Bu parçanın üretilmesi planlanan açık miktarı" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Stok Kalemleri" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "Revizyonlar" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Toplam Stok" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "Tahsis Edilmemiş Stok" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "Varyant Stoku" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Parçanın Kopyasını Oluştur" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "Başlangıç verisini diğer parçadan kopyala" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Görseli Kopyala" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Orijinal parçadan görseli kopyala" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "BOM'u Kopyala" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "Orijinal parçadan ürün ağacını kopyala" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "Notları Kopyala" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Orijinal parçadan notları kopyala" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "Testleri Kopyala" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "Orijinal parçadan test şablonlarını kopyala" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Başlangıç Stoku" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "Başlangıç stok miktarı ile parça oluştur" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Tedarikçi Bilgileri" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "Bu parça için ilk tedarikçi bilgilerini ekleyin" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Kategori Parametrelerini Kopyala" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "Parametre şablonlarını seçili parça kategorisinden kopyala" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Mevcut Görsel" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "Mevcut parça görselinin dosya adı" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Görsel dosyası mevcut değil" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Tüm ürün ağacını doğrula" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Üretebilir Miktar" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "Üretim Emirleri için Gerekli" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "Üretim Emirlerine Tahsis Edildi" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "Satış Siparişleri için Gerekli" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "Satış Siparişlerine Tahsis Edildi" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "Parça DPN" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "Parça Açıklaması" -#: part/serializers.py:1369 +#: part/serializers.py:1336 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:1379 +#: part/serializers.py:1346 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:1389 +#: part/serializers.py:1356 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:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "Stok Sayımı Kayıtları Oluşturun" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "Seçili parçalar için stok sayımı girdilerini kaydet" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "Rapor Oluştur" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "Seçili parçalar için bir stok sayımı raporu oluştur" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Minimum Fiyat" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Minimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Minimum fiyat para birimi" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Maksimum Fiyat" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Maksimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Maksimum fiyat para birimi" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Güncelle" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Bu parçanın fiyatlandırmasını güncelle" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "Minimum fiyat maksimum fiyattan yüksek olamaz" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "Maksimum fiyat minimum fiyattan düşük olamaz" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "Bu öge için gereken miktar (birim içerebilir)" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "Üst montajı seçin" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "Bileşeni seçin" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "Geçersiz miktar biçimi" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "BOM'u kopyalanacak parçayı seçin" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Mevcut Verileri Temizle" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "Kopyalamadan önce mevcut BOM kalemlerini temizle" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Devralınanı Dahil Et" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "Şablon parçalardan devralınan BOM kalemlerini dahil et" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Geçersiz Satırları Atla" -#: part/serializers.py:2053 +#: part/serializers.py:2020 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:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Muadil Parçaları Kopyala" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOM kalemlerinin kopyasını oluştururken muadil parçaları kopyala" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Barkodlar için yerleşik destek sağlar" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "Kısa Barkod Ön Eki" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "Kısa barkodlar için kullanılan ön eki özelleştirin; birden fazla InvenTree örneği bulunan ortamlar için kullanışlı olabilir" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "Üretimleri Otomatik Oluştur" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "Montajlar için otomatik olarak üretim emirleri oluşturun" @@ -9453,8 +9437,8 @@ msgstr "Stok kalemi belirtilmedi" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Miktar, mevcut stok miktarını ({q}) aşmamalıdır" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Hedef stok konumu" @@ -9626,7 +9610,7 @@ msgstr "Stok kalemi zaten stokta" msgid "Quantity must not be negative" msgstr "Miktar negatif olamaz" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "Mevcut stokla birleştir" @@ -9642,15 +9626,20 @@ msgstr "Stok aktarım notları" msgid "Set stock location for counted items (optional)" msgstr "Sayılan kalemler için stok konumunu belirle (isteğe bağlı)" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 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:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "Sıradaki Seri Numarası" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "Önceki Seri Numarası" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index 6e4dfdd13b..72b209373e 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -89,7 +89,7 @@ msgstr "Не вдалося перетворити {original} на {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Невірна кількість" @@ -97,16 +97,16 @@ msgstr "Невірна кількість" msgid "Error details can be found in the admin panel" msgstr "Деталі помилки можна знайти на панелі адміністратора" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Введіть дату" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "Неправильне десяткове значення" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Назва" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Опис" msgid "Description (optional)" msgstr "Опис (опціонально)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Шлях" @@ -334,7 +334,7 @@ msgstr "Помилка сервера" msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Зображення" msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Збірка" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Тестуємо" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Місце" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Обрати деталь для створення" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "" msgid "Quantity" msgstr "Кількість" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "У виробництві" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "" @@ -1608,9 +1644,9 @@ msgstr "" msgid "Project description" msgstr "" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Користувач" msgid "Price break quantity" msgstr "" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Ціна" @@ -1679,560 +1715,560 @@ msgstr "Ціна" msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Назва" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Посилання" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Коментар" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "Дата завантаження" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "Дата завантаження файлу" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "Розмір файлу" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "Розмір файлу в байтах" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "Етикетка" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "Колір" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "Модель" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "Список вибору" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "Заблоковано" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Прапорець" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Шаблон" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Дані" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "" msgid "Note" msgstr "Примітка" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,8 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Компонент" @@ -2932,7 +2968,7 @@ msgstr "Компонент" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "" @@ -2940,7 +2976,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Доступний для продажу" @@ -2952,7 +2988,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Віртуальний" @@ -4215,8 +4251,8 @@ msgstr "Внутрішня позиція активна" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Виробник" @@ -4406,7 +4442,7 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Позиція виробника" @@ -4424,8 +4460,8 @@ msgstr "Обрати позицію" msgid "Select manufacturer" msgstr "" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "" @@ -4493,15 +4529,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "Базова вартість" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "" @@ -4518,7 +4554,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "" @@ -4542,31 +4578,31 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "В наявності" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Дійсно" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Внутрішній компонент" @@ -5124,11 +5160,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -5477,8 +5513,8 @@ msgstr "" msgid "User who checked this shipment" msgstr "" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" @@ -5544,8 +5580,8 @@ msgstr "" msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" @@ -6259,656 +6251,660 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Позиції" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Неможливо видалити цю позицію, оскільки вона заблокована" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Неможливо видалити цю позицію, оскільки вона ще активна" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Неможливо видалити цю позицію, бо вона використовується у збірці" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Назва позиції" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Це шаблон" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ця позиція є шаблоном?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Опис позиції (опціонально)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Ревізія" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "Ревізія" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Мінімальний запас" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Мінімально дозволений рівень запасів" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Одиниці виміру для цієї позиції" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Чи можна побудувати цю позицію з інших компонентів?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 -msgid "BOM checksum" +msgid "BOM Validated" msgstr "" #: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Дата" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Тестова назва" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Позиція 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Позиція 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "" @@ -6956,331 +6952,319 @@ msgstr "" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Виробничий номер позиції" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Початковий запас" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Наявне зображення" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Мінімальна ціна" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Максимальна ціна" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 9fd11198db..1ec12090a9 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -89,7 +89,7 @@ msgstr "Không thể chuyển đổi {original} sang {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" @@ -97,16 +97,16 @@ msgstr "Số lượng cung cấp không hợp lệ" msgid "Error details can be found in the admin panel" msgstr "Chi tiết lỗi có thể được tìm thấy trong bảng quản trị" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "Nhập ngày" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "Số tham chiếu quá lớn" msgid "Invalid choice" msgstr "Lựa chọn sai" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "Tên" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "Mô tả" msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "Đường dẫn" @@ -334,7 +334,7 @@ msgstr "Lỗi máy chủ" msgid "An error has been logged by the server." msgstr "Lỗi đã được ghi lại bởi máy chủ." -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "Hình ảnh" msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" @@ -373,6 +373,46 @@ msgstr "" msgid "Content type does not match required mixin class" msgstr "" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "Sao chép thông số" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "Arabic" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "Mã tiền tệ không hợp lệ" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "Trạng thái đặt hàng" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "Phiên bản cha" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "" msgid "Part" msgstr "Nguyên liệu" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "Danh mục" @@ -661,125 +701,126 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Bạn dựng phải được hủy bỏ trước khi có thể xóa được" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "Lắp ráp" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "Có thể kiểm tra" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "Đã dùng" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "Bật đơn hàng" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 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:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "Địa điểm" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "Tạo đơn hàng" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "Dây chuyền BOM chưa được xác thực" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "Không thể tạo đơn hàng cho hàng hoá đang không hoạt động" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "Không thể tạo đơn hàng cho hàng hoá đang mở khoá" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "Phải chọn người dùng hoặc nhóm" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "Sản phẩm đơn đặt bản dựng không thể thay đổi được" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "Tham chiếu đơn đặt bản dựng" msgid "Reference" msgstr "Tham chiếu" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "Chọn sản phẩm để xây dựng" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "Địa điểm nguồn" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Chọn địa điểm để lấy trong kho cho bản dựng này (để trống để lấy từ bất kỳ vị trí kho nào)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "Địa điểm đích" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "Chọn địa điểm nơi hàng hóa hoàn thiện sẽ được lưu kho" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "Xây dựng số lượng" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "Số kho hàng để dựng" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "Những mục hoàn thành" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "Số sản phẩm trong kho đã được hoàn thiện" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "Trnạg thái bản dựng" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 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:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "Ngày tạo" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "Ngày hoàn thành mục tiêu" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ngày mục tiêu để hoàn thành bản dựng. Bản dựng sẽ bị quá hạn sau ngày này." -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "hoàn thành bởi" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "Cấp bởi" -#: build/models.py:402 +#: build/models.py:399 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:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Chịu trách nhiệm" -#: build/models.py:420 +#: build/models.py:417 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:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "Liên kết bên ngoài" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "Liên kết đến URL bên ngoài" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "Độ ưu tiên" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "Mã dự án" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 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:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:961 +#: build/models.py:958 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:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 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:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1132 build/serializers.py:570 -#, 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:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "Tạo mục đơn hàng" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "Dựng đối tượng" msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1843 +#: build/models.py:1874 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:1906 +#: build/models.py:1937 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:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1941 +#: build/models.py:1972 #, 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:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:2058 +#: build/models.py:2089 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:2067 +#: build/models.py:2098 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "Kho hàng đích" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "Tạo cấp" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "Tên sản phẩm" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:233 +#: build/serializers.py:256 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:237 +#: build/serializers.py:260 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:241 +#: build/serializers.py:264 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:255 +#: build/serializers.py:278 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:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:345 +#: build/serializers.py:380 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:351 +#: build/serializers.py:386 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:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:369 +#: build/serializers.py:404 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:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "Vị trí tồn kho cho sản phẩm" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:392 +#: build/serializers.py:427 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:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 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:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 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:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:495 +#: build/serializers.py:530 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:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:546 +#: build/serializers.py:583 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:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "Xử lý phân bổ kho hàng" -#: build/serializers.py:636 +#: build/serializers.py:649 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:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:643 +#: build/serializers.py:656 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:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:671 +#: build/serializers.py:684 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:672 +#: build/serializers.py:685 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:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:702 +#: build/serializers.py:715 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:713 +#: build/serializers.py:726 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:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:720 +#: build/serializers.py:733 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:731 +#: build/serializers.py:744 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:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:738 +#: build/serializers.py:751 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:749 +#: build/serializers.py:762 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:761 +#: build/serializers.py:774 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:764 +#: build/serializers.py:777 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:767 +#: build/serializers.py:780 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:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:822 +#: build/serializers.py:835 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:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:871 +#: build/serializers.py:884 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:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:936 +#: build/serializers.py:949 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:944 +#: build/serializers.py:957 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:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:1032 +#: build/serializers.py:1045 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:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1042 +#: build/serializers.py:1055 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:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1048 +#: build/serializers.py:1061 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:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1060 +#: build/serializers.py:1073 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:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "BOM liên quan" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "ID hàng hoá BOM" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "Tên hàng hoá BOM" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "Sản phẩm nhà cung cấp" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "Số lượng đã phân bổ" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "Tạo liên quan" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "Tên danh mục hàng hoá" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "Có thể theo dõi" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "Kho ngoài" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "Kho hàng thay thế" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "Hàng tồn kho có sẵn" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "Nhãn mã dự án" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "Đã cập nhật" @@ -1608,9 +1644,9 @@ msgstr "Mã dự án duy nhất" msgid "Project description" msgstr "Mô tả dự án" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "" msgid "Key string must be unique" msgstr "Chuỗi khóa phải duy nhất" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "Người dùng" msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "Giá" @@ -1679,560 +1715,560 @@ msgstr "Giá" msgid "Unit price at specified quantity" msgstr "Đơn vị giá theo số lượng cụ thể" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "Đầu mối" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "Đầu mối tại điểm webhook được nhận" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "Webhook có hoạt động không" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "Chữ ký số" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "Chữ ký số để truy cập" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "Bí mật" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "Máy chủ" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "Mãy chủ từ tin nhắn này đã được nhận" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "Đầu mục" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "Đầu mục tin nhắn" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "Thân" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "Thân tin nhắn này" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "Đầu mối của tin nhắn này đã nhận được" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "Làm việc vào" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "Công việc trong tin nhắn này đã kết thúc?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "Mã" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "Tiêu đề" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Liên kết" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "Đã công bố" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "Tác giả" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "Đọc" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "Tin này đã được đọc?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "Tệp ảnh" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "Tên đơn vị phải là một định danh hợp lệ" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "Tên đơn vị" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "Biểu tượng" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "Biểu tượng đơn vị tùy chọn" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "Định nghĩa" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "Định nghĩa đơn vị" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "Đính kèm" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "Tập tin bị thiếu" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "Thiếu liên kết bên ngoài" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "Chọn file đính kèm" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "Bình luận" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "Giá trị" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "Đã tạo" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "Cập nhật lần cuối" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "Mẫu tham số" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: common/models.py:2667 +#: common/models.py:2673 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:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "Tên tham số" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "Đơn vị" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "Mô tả tham số" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "Ô lựa chọn" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "Lựa chọn" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "Lựa chọn hợp lệ từ tham số này (ngăn cách bằng dấu phẩy)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "Đã bật" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "Mẫu" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "Dữ liệu" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "Giá trị tham số" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "Giá trị tham số" msgid "Note" msgstr "Ghi chú" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "Ngữ cảnh" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "Kết quả" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "Khóa" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "" @@ -2923,8 +2959,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:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "Thành phần" @@ -2932,7 +2968,7 @@ msgstr "Thành phần" msgid "Parts can be used as sub-components by default" msgstr "Sản phẩm có thể được sử dụng mặc định như thành phần phụ" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "Có thể mua" @@ -2940,7 +2976,7 @@ msgstr "Có thể mua" msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "Có thể bán" @@ -2952,7 +2988,7 @@ msgstr "Sản phẩm mặc định có thể bán được" msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "Ảo" @@ -4215,8 +4251,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "Nhà sản xuất" @@ -4406,7 +4442,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:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" @@ -4424,8 +4460,8 @@ msgstr "Chọn sản phẩm" msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "" @@ -4453,8 +4489,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:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "Nhà cung cấp" msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" @@ -4493,15 +4529,15 @@ 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:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "Đóng gói" @@ -4518,7 +4554,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:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "nhiều" @@ -4542,31 +4578,31 @@ msgstr "Ngày cập nhật cuối thông tin tồn kho" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "Còn hàng" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4735,11 +4771,11 @@ msgstr "" msgid "Original row data" msgstr "" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "Hợp lệ" @@ -4899,55 +4935,55 @@ msgstr "" msgid "Scope the printer to a specific location" msgstr "" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "" @@ -5066,7 +5102,7 @@ msgstr "Đặt hàng" msgid "Order Complete" msgstr "" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "Sản phẩm nội bộ" @@ -5124,11 +5160,11 @@ msgstr "Tổng tiền" msgid "Total price for this order" msgstr "Tổng tiền cho đơn hàng hàng" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "Tiền tệ đơn đặt hàng" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "Tiền tệ cho đơn đặt này (để trống để sử dụng tiền mặc định)" @@ -5168,7 +5204,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ngày mục tiêu" @@ -5477,8 +5513,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:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Vận chuyển" @@ -5544,8 +5580,8 @@ 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:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "Số lượng phải là 1 cho hàng hóa sêri" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "Sao chép thông số" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "" msgid "Line Items" msgstr "Mục dòng" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 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:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 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:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 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:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 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:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:2291 +#: order/serializers.py:2289 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:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:2331 +#: order/serializers.py:2329 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:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "" msgid "BOM Valid" msgstr "" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "" @@ -6210,7 +6202,7 @@ msgstr "Danh mục sản phẩm" msgid "Part Categories" msgstr "Danh mục sản phẩm" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Điểm bán mặc định" @@ -6259,656 +6251,660 @@ 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:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "Nguyên liệu" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Không thể dùng sản phẩm '{self}' trong BOM cho '{parent}' (đệ quy)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Sản phẩm '{parent}' được dùng trong BOM cho '{self}' (đệ quy)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN phải phù hợp mẫu biểu thức chính quy {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Hàng trong kho với số sê ri này đã tồn tại" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN trùng lặp không được cho phép trong thiết lập sản phẩm" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Sản phẩm với Tên, IPN và Duyệt lại đã tồn tại." -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Sản phẩm không thể được phân vào danh mục sản phẩm có cấu trúc!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "Tên sản phẩm" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "Là Mẫu" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Sản phẩm này có phải là sản phẩm mẫu?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Đây có phải là 1 biến thể của sản phẩm khác?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "Biến thể của" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Mô tả (không bắt buộc)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "Từ khóa" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Từ khóa sản phẩm để cải thiện sự hiện diện trong kết quả tìm kiếm" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Số phiên bản hoặc bản duyệt lại sản phẩm" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "Phiên bản" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Hàng hóa này sẽ được cất vào đâu?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Hết hạn mặc định" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Thời gian hết hạn (theo ngày) để nhập kho hàng hóa cho sản phẩm này" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "Kho tối thiểu" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Cấp độ kho tối thiểu được phép" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "Đơn vị đo cho sản phẩm này" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "Sản phẩm này có thể được dựng từ sản phẩm khác?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "Sản phẩm này có thể dùng để dựng các sản phẩm khác?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "Sản phẩm này có đang theo dõi cho hàng hóa duy nhất?" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "Sản phẩm này có thể mua được từ nhà cung ứng bên ngoài?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "Sản phẩm này có thể được bán cho khách hàng?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "Sản phẩm này đang hoạt động?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "Đây là sản phẩm ảo, ví dụ như sản phẩm phần mềm hay bản quyền?" -#: part/models.py:1313 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1314 -msgid "Is the BOM for this part valid?" +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" msgstr "" #: part/models.py:1320 +msgid "BOM Validated" +msgstr "" + +#: part/models.py:1321 +msgid "Is the BOM for this part valid?" +msgstr "" + +#: part/models.py:1327 msgid "BOM checksum" msgstr "Giá trị tổng kiểm BOM" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "Giá trị tổng kiểm BOM đã được lưu" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "BOM kiểm tra bởi" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "Ngày kiểm tra BOM" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "Tạo người dùng" -#: part/models.py:1360 +#: part/models.py:1367 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:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3376 +#: part/models.py:3380 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:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3414 +#: part/models.py:3418 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:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3421 +#: part/models.py:3425 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:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3428 +#: part/models.py:3432 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:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3435 +#: part/models.py:3439 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:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3442 +#: part/models.py:3446 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:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3449 +#: part/models.py:3453 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:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3456 +#: part/models.py:3460 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:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3491 +#: part/models.py:3495 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:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3536 +#: part/models.py:3540 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:3544 +#: part/models.py:3548 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:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "Ngày" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3557 +#: part/models.py:3561 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:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3564 +#: part/models.py:3568 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:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3809 +#: part/models.py:3813 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:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3816 +#: part/models.py:3820 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:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4136 +#: part/models.py:4140 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:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4203 +#: part/models.py:4207 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:4209 +#: part/models.py:4213 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:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 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:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4500 +#: part/models.py:4510 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:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "" -#: part/models.py:4572 +#: part/models.py:4582 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:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" @@ -6956,331 +6952,319 @@ msgstr "Loại tiền mua hàng của hàng hóa này" msgid "File is not an image" msgstr "" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "Sản phẩm gốc" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "Chọn sản phẩm gốc để nhân bản" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "Sao chép ảnh" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "Sao chép hình ảnh từ sản phẩm gốc" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "Sao chép BOM" - -#: part/serializers.py:444 -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:451 -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:457 -msgid "Copy Notes" -msgstr "Sao chép ghi chú" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "Sao chép ghi chú từ sản phẩm gốc" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:485 +#: part/serializers.py:425 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:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:493 +#: part/serializers.py:433 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:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:526 +#: part/serializers.py:466 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:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:543 +#: part/serializers.py:483 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:552 +#: part/serializers.py:492 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:563 +#: part/serializers.py:503 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:570 +#: part/serializers.py:510 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:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "Tên danh mục" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "Đang dựng" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "Hàng trong kho" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: 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:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:1012 +#: part/serializers.py:954 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:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "Sao chép ảnh" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "Sao chép hình ảnh từ sản phẩm gốc" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "Sao chép BOM" + +#: part/serializers.py:966 +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:971 +msgid "Copy Notes" +msgstr "Sao chép ghi chú" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "Sao chép ghi chú từ sản phẩm gốc" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:1019 +#: part/serializers.py:986 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:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:1026 +#: part/serializers.py:993 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:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:1036 +#: part/serializers.py:1003 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:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:1042 +#: part/serializers.py:1009 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:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "Có thể dựng" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, 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:1591 +#: part/serializers.py:1558 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:1594 +#: part/serializers.py:1561 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:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 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:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:2041 +#: part/serializers.py:2008 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:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:2047 +#: part/serializers.py:2014 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:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:2053 +#: part/serializers.py:2020 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:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:2059 +#: part/serializers.py:2026 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" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "Cung cấp hỗ trợ gốc cho mã vạch" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "" @@ -9453,8 +9437,8 @@ msgstr "" 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:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "Vị trí kho đích" @@ -9626,7 +9610,7 @@ msgstr "" msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "" @@ -9642,15 +9626,20 @@ msgstr "Ghi chú giao dịch kho" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index a91abf1366..fc508134a2 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -89,7 +89,7 @@ msgstr "不能将 {original} 转换到 {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "提供的数量无效" @@ -97,16 +97,16 @@ msgstr "提供的数量无效" msgid "Error details can be found in the admin panel" msgstr "在管理面板中可以找到错误详细信息" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "输入日期" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "无效的数值" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -222,7 +222,7 @@ msgstr "电子邮件" #: InvenTree/middleware.py:126 msgid "CSRF verification failed. Ensure INVENTREE_SITE_URL and INVENTREE_TRUSTED_ORIGINS are configured correctly." -msgstr "" +msgstr "CSRF 校验失败。请正确配置 INVENTREE_SITE_URL 与 INVENTREE_TRUSTED_ORIGINS 参数。" #: InvenTree/middleware.py:218 msgid "You must enable two-factor authentication before doing anything else." @@ -272,18 +272,18 @@ msgstr "参考编号过大" msgid "Invalid choice" msgstr "无效选项" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "名称" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(选填)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "路径" @@ -334,7 +334,7 @@ msgstr "服务器错误" msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "图像" msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "货币" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "从可用选项中选择货币" @@ -373,6 +373,46 @@ msgstr "未找到内容类型" msgid "Content type does not match required mixin class" msgstr "内容类型不匹配所需的 mixin 类" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "复制参数" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "复制行" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "从原始订单复制行项目" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "复制额外行" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "从原始订单复制额外的行项目" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "阿拉伯语" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "无效的货币代码" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "订单状态" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "父级生产订单" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "包含变体" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "类别" @@ -661,125 +701,126 @@ msgstr "排除树" msgid "Build must be cancelled before it can be deleted" msgstr "生产订单必须取消后才能删除" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "耗材" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "可选项" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "装配件" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "可追溯" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "需检测" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "未结算订单" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "已分配" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "已消耗" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "已订购" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "未找到版本" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生产订单" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "库存位置" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "产出" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "按产出库存项ID筛选,使用“null”查找未安装的生产项。" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "生产订单" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "装配物料清单尚未验证" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "无法为未激活的零件创建生产订单" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "无法为已解锁的零件创建生产订单" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "生产订单仅能通过外部采购可购买零件来完成" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "必须指定负责的用户或组" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "生产订单关联零件不可变更" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "目标日期必须在开始日期之后" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "生产订单编号" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "生产订单编号" msgid "Reference" msgstr "编号" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "生产订单的简要说明(可选)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "该生产订单所属的上级生产订单" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "选择要生产的零件" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "销售订单编号" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "该生产订单关联的销售订单" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "源库位" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "指定本次生产领料的来源库位(留空可从任意库位调拨)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "外协生产" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "该生产订单由外部供应商完成" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "目标库位" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "选择生产完成品的存放库位" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "需要生产的库存品数量" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "已完成并入库的库存物品数量" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "生产状态" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "批号" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "本批产出的批次编号" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "建立日期" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "生产开始日期" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "此生产订单的计划开始日期" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "计划完成日期" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产订单的计划完成时间,逾期后系统将标记为超期。" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "完成日期" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "完成人" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "发起人" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "创建该生产订单的用户" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "责任方" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "该生产订单的责任人或责任团队" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "外部链接" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "指向外部资源的URL链接" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "生产优先级" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "此生产订单的优先级" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "项目编号" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "该生产订单归属的项目编号" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "无法完成生产订单,存在未关闭的子生产订单" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "无法完成生产订单,存在未完成的产出项" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "可追溯零件必须填写序列号" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "未指定产出" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "产出已完成" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "产出与生产订单不匹配" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "数量必须大于零" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "数量不能大于产出数量" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "产出未通过所有必要测试" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "产出 {serial} 未通过所有必要测试" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "已分配的库存物料仍在生产中" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "存在已分配物料时无法部分完成生产输出" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "生产订单行项目" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "生产对象" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "生产对象" msgid "Quantity" msgstr "数量" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "生产订单所需数量" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "库存消耗量" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "所选库存项与物料清单行项不匹配" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "序列化物料的数量必须为1" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "库存品项超额分配" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "库存项" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "分配给该生产任务的库存量" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "安裝到" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "生产等级" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "零件名称" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "产出" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "生产产出与上级订单不匹配" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "产出零件与生产订单零件不匹配" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "此产出已经完成" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "此产出尚未完全分配" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "输入产出数量" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "可追踪的零件数量必须为整数" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "输入产出的序列号" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "生产产出的库存地点" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "必须提供产出清单" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "报废品库存地点" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "放弃分配" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消对报废产品的库存分配" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "废品产出的原因" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "完工产出存放库位" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未全部分配,则完成产出" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "消耗已分配库存" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "立即扣除已分配给该生产任务的库存" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的产出" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "禁止操作" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "标记为当前生产订单消耗" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "完成此生产订单前取消分配" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "超额分配库存" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何处理分配给生产订单的超额库存" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "存在超额分配的库存项" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完全分配至生产订单" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "必需库存未完成全量分配" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "接受未完工" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "允许所需数量的产出未完成" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "生产需求数量未完成" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "生产订单有打开的子生产订单" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "生产订单必须处于生产状态" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "生产行" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "产出" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "生产行项目" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单零件相同" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的零件的分配,必须指定生产产出" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的零件,无法指定生产产出" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "必须提供分配项目" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件来源的库存地点(留空则可来源于任何库存地点)" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "从该选定的库存地点排除库存项" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "可互换库存" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多个位置的库存项目可以互换使用" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "替代品库存" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的零件" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "分配可选的物料清单给生产订单" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "所有物料" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "未跟踪的物品" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "已跟踪的物品" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "物品类型" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "选择要自动分配的条目类型" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" -msgstr "" +msgstr "库存优先级" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" -msgstr "" +msgstr "匹配库存物料的优先消耗顺序" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" -msgstr "" +msgstr "产线" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" -msgstr "" +msgstr "仅分配物料至指定产线(留空则允许分配至全部产线)" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "物料清单参考" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "物料清单零件识别号码" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "物料清单零件名称" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "安裝到" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "生产" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "供应商零件" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "已分配数量" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "生产订单编号" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "零件类别名称" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "可追踪" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "物料清单项" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "生产中" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "可用库存" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "可用的替代品库存" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "可用的变体库存" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗数量超过分配数量" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "库存消耗可选备注" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "生产物料项必须关联到正确的生产订单" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "重复的生产物料项分配" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "订单行项目必须关联到正确的生产订单" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "重复的订单行项目分配" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "必须提供至少一个物料项或行项目" @@ -1533,7 +1569,7 @@ msgstr "生产订单 {bo} 现已逾期" #: common/api.py:764 msgid "Has Thumbnail" -msgstr "" +msgstr "存在缩略图" #: common/api.py:773 msgid "Is Link" @@ -1584,7 +1620,7 @@ msgstr "标签" msgid "Project Code Label" msgstr "项目编号标签" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "已是最新" @@ -1608,9 +1644,9 @@ msgstr "唯一项目编码" msgid "Project description" msgstr "项目描述" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1618,7 +1654,7 @@ msgstr "激活" #: common/models.py:187 msgid "Is this project code active?" -msgstr "" +msgstr "此项目编码是否启用?" #: common/models.py:196 msgid "User or group responsible for this project" @@ -1656,10 +1692,10 @@ msgstr "值未通过验证检查" msgid "Key string must be unique" msgstr "键字符串必须是唯一的" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批发价数量" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "价格" @@ -1679,560 +1715,560 @@ msgstr "价格" msgid "Unit price at specified quantity" msgstr "指定数量的单位价格" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "端点" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "接收此网络钩子的端点" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "此网络钩子的名称" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "网络钩子是否已启用" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "令牌" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "访问令牌" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "密钥" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "HMAC共享密钥" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "此邮件的唯一标识符" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "主机" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "接收此消息的主机" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "标题" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "此消息的标题" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "正文" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "接收此消息的终点" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "工作于" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "这条消息的工作完成了吗?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "标识" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "标题" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "链接" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "已发布" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "作者" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "摘要" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "阅读" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "这条新闻被阅读了吗?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "图像文件" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "此图像的目标模型类型" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "此图像的目标型号ID" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "自定义单位" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "单位符号必须唯一" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "单位名称必须是有效的标识符" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "单位名称" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "符号" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "可选单位符号" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "定义" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "单位定义" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "附件" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "缺少文件" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "缺少外部链接" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "没有要重命名的文件" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "文件名不能为空" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "无效的文件名" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "无法更改文件扩展名" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "已存在同名文件" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "重命名文件保存失败" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "模型类型" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "图片的目标模型类型" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "选择附件" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" -msgstr "" +msgstr "缩略图" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" -msgstr "" +msgstr "该附件对应的缩略预览图" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "备注" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "附件备注" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "上传日期" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "上传文件的日期" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" -msgstr "" +msgstr "是否为图片文件" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" -msgstr "" +msgstr "若该附件是合法图片文件,则值为 True(是)" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "文件大小" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "文件大小,以字节为单位" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "为附件指定的模型类型无效" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "自定状态" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "定制状态" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "参考状态设置" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "使用此自定义状态扩展状态的状态集" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "逻辑密钥" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同于商业逻辑中自定义状态的状态逻辑键" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "值" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "将保存至模型数据库的数值" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "状态名" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "标签" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "将在前端显示的标签" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "颜色" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "将在前端显示颜色" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "型号" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "该状态关联的模型" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "必须选定模型" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "必须选取密钥" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "必须选中逻辑密钥" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "密钥必须不同于逻辑密钥" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "必须提供有效的参考状态类" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "密钥必须不同于参考状态的逻辑密钥" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "逻辑密钥必须在参考状态的逻辑键中" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "名称必须不同于参考状态的名称" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "选择列表" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "选择列表" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "选择列表的名称" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "选择列表的描述" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "已锁定" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "此选择列表是否已锁定?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "能否使用此选择列表?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "源插件" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "提供选择列表的插件" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "源字符串" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "可选字符串,用于标识本列表的数据来源" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "缺省项" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "本选择列表的默认选项" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "已创建" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "选择列表的创建日期和时间" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "选择列表的最后更新时间" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "选择列表项" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "选择列表项" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "此选项归属的选择列表" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "选择列表项的值" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "选择列表项的标签" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "选择列表项的描述" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "该选择列表项是否处于激活状态?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "参数模板" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "参数模板" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "勾选框参数不能有单位" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "复选框参数不能有选项" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "选择必须是唯一的" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "参数模板名称必须是唯一的" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "此参数模板的目标模型类型" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "参数名称" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "单位" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "此参数的物理单位" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "参数说明" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "勾选框" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "此参数是否为勾选框?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "选项" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "此参数的有效选择 (逗号分隔)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "此参数的选择列表" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "已启用" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "此参数模板是否启用?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "参数" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "参数" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "为附件指定的模型类型无效" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "型号ID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "此参数的目标模型的 ID" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "模板" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "参数模板" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "数据" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "参数值" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "参数值" msgid "Note" msgstr "备注" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "可选注释字段" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "扫描条码" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "条码数据" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "扫描条码的用户" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "时间戳" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "扫描条形码的日期和时间" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "处理条码的 URL 端点" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "扫描条形码的上下文数据" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "响应" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "扫描条形码的响应数据" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "结果" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "条码扫描成功吗?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "发生错误" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:邮件日志删除受保护。需设置 INVENTREE_PROTECT_EMAIL_LOG 为 False 以允许删除。" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "电子邮件信息" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "电子邮箱信息" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "已发布" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "已发送" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "失败" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "已送达" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "已确认" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "入站" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "出站" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "暂无回复消息" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "跟踪交付" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "已读追踪" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "点击追踪" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "全局ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "此消息的标识符 (可能由外部系统提供)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "主题 ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此消息主题的标识符 (可能由外部系统提供)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "主题" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "链接到此消息的主题" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "优先" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "邮件主题" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "邮件主题" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "键" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "此主题的唯一密钥 (用于识别主题)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "此主题的唯一标识符" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "内部服务已启动" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "该线程是否为内部启动的?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "创建主题的日期和时间" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "主题最后更新的日期和时间" @@ -2693,11 +2729,11 @@ msgstr "使用货币更新插件" #: common/setting/system.py:290 msgid "Upload Size Limit" -msgstr "" +msgstr "上传文件大小限制" #: common/setting/system.py:291 msgid "Maximum allowable upload size for images and files" -msgstr "" +msgstr "图片与各类文件允许上传的最大容量" #: common/setting/system.py:297 msgid "Strict URL Validation" @@ -2829,11 +2865,11 @@ msgstr "用于内部条形码数据生成的插件" #: common/setting/system.py:406 msgid "Part Locking" -msgstr "" +msgstr "零件锁定" #: common/setting/system.py:407 msgid "Enable locking of parts to prevent modification" -msgstr "" +msgstr "启动零件锁定功能,禁止对零件信息进行修改" #: common/setting/system.py:412 msgid "Part Revisions" @@ -2923,8 +2959,8 @@ msgstr "零件默认为模板" msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "组件" @@ -2932,7 +2968,7 @@ msgstr "组件" msgid "Parts can be used as sub-components by default" msgstr "默认情况下,零件可用作子部件" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "可购买" @@ -2940,7 +2976,7 @@ msgstr "可购买" msgid "Parts are purchaseable by default" msgstr "默认情况下可购买零件" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "可销售" @@ -2952,7 +2988,7 @@ msgstr "零件默认为可销售" msgid "Parts are trackable by default" msgstr "默认情况下可跟踪零件" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "虚拟的" @@ -3138,11 +3174,11 @@ msgstr "以调试模式生成报告(HTML 输出)" #: common/setting/system.py:681 msgid "Report URL Fetching" -msgstr "" +msgstr "报表URL地址拉取" #: common/setting/system.py:682 msgid "Allow fetching of remote URLs when generating reports" -msgstr "" +msgstr "生成报表时允许拉取远程链接资源" #: common/setting/system.py:687 msgid "Log Report Errors" @@ -3187,11 +3223,11 @@ msgstr "设置库存耗尽时的默认行为" #: common/setting/system.py:719 msgid "Allow Edit Serial Number" -msgstr "" +msgstr "允许编辑序列号" #: common/setting/system.py:720 msgid "Allow editing of serial number for stock items" -msgstr "" +msgstr "允许编辑库存货品的序列号" #: common/setting/system.py:725 msgid "Delete Serialized Stock" @@ -3283,11 +3319,11 @@ msgstr "允许对当前库存量为零的物品执行库位间调拨操作" #: common/setting/system.py:797 msgid "Merge stock with existing stock on transfer by default" -msgstr "" +msgstr "调拨库存时,默认将货品合并至现有同批次库存" #: common/setting/system.py:799 msgid "Default state for merge stock on transfer behaviour. (Can be changed per transfer if desired)" -msgstr "" +msgstr "调拨库存合并功能的默认状态。(如需,可在单次调拨操作时单独修改)" #: common/setting/system.py:805 msgid "Build Order Reference Pattern" @@ -3431,19 +3467,19 @@ msgstr "标记为已发货的销售订单将自动完成,绕过“已发货” #: common/setting/system.py:935 msgid "Enable Transfer Orders" -msgstr "" +msgstr "启用库存调拨单" #: common/setting/system.py:936 msgid "Enable transfer order functionality in the user interface" -msgstr "" +msgstr "在操作界面中启用库存调拨单功能" #: common/setting/system.py:941 msgid "Transfer Order Reference Pattern" -msgstr "" +msgstr "调拨单号编码规则" #: common/setting/system.py:943 msgid "Required pattern for generating Transfer Order reference field" -msgstr "" +msgstr "生成调拨单编号字段所需的编码格式模板" #: common/setting/system.py:955 msgid "Block Incomplete Item Tests" @@ -3799,15 +3835,15 @@ msgstr "星期六" #: common/setting/system.py:1261 msgid "Calendar Horizon" -msgstr "" +msgstr "日历时间跨度" #: common/setting/system.py:1263 msgid "Number of months into the future to display in calendar views" -msgstr "" +msgstr "日历视图中需展示的未来月份数量" #: common/setting/system.py:1267 msgid "months" -msgstr "" +msgstr "个月" #: common/setting/system.py:1270 msgid "Enable Test Station Data" @@ -4091,11 +4127,11 @@ msgstr "在导航栏中显示当前页面" #: common/setting/user.py:239 msgid "Show Extra Model Information" -msgstr "" +msgstr "显示模型扩展信息" #: common/setting/user.py:240 msgid "Display extra information in model selection dropdowns" -msgstr "" +msgstr "在模型选择下拉框中展示扩展附加信息" #: common/setting/user.py:245 msgid "Show full stock location in tables" @@ -4162,11 +4198,11 @@ msgstr "附件模型类型无效" #: common/validators.py:87 #, python-brace-format msgid "File size exceeds maximum upload limit of {max_size} MB" -msgstr "" +msgstr "文件大小超出最大上传限制,上限为 {max_size} MB" #: common/validators.py:93 msgid "Invalid file name" -msgstr "" +msgstr "文件名无效" #: common/validators.py:127 msgid "Minimum places cannot be greater than maximum places" @@ -4217,8 +4253,8 @@ msgstr "内部零件已激活" msgid "Supplier is Active" msgstr "供应商已激活" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "制造商" @@ -4408,7 +4444,7 @@ msgstr "内部使用的装运通知单" msgid "Link to address information (external)" msgstr "链接地址信息 (外部)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "制造商零件" @@ -4426,8 +4462,8 @@ msgstr "选择零件" msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "制造商零件编号" @@ -4455,8 +4491,8 @@ msgstr "包装单位必须大于零" msgid "Linked manufacturer part must reference the same base part" msgstr "链接的制造商零件必须引用相同的基础零件" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4467,7 +4503,7 @@ msgstr "供应商" msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "供应商库存管理单位" @@ -4495,15 +4531,15 @@ msgstr "外部供应商零件链接的URL" msgid "Supplier part description" msgstr "供应商零件说明" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "基本费用" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "打包" @@ -4520,7 +4556,7 @@ msgstr "包装数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "单包供应的总数量。为单个项目留空。" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "多个" @@ -4544,31 +4580,31 @@ msgstr "上次更新可用性数据的日期" msgid "Supplier Price Break" msgstr "供应商批发价" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "此供应商使用的默认货币" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "公司名称" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "有库存" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "批发价" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "美化名称" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "数据导出过程中发生错误" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "数据导出插件返回的数据格式不正确" @@ -4662,11 +4698,11 @@ msgstr "某些必填字段尚未映射" #: importer/models.py:414 msgid "Completed Row Count History" -msgstr "" +msgstr "已完成条目数量历史记录" #: importer/models.py:417 msgid "Row Count History" -msgstr "" +msgstr "条目数量历史记录" #: importer/models.py:440 msgid "ID" @@ -4702,12 +4738,12 @@ msgstr "所选字段为只读" #: importer/models.py:552 msgid "Lookup field can only be set for related (foreign-key) fields" -msgstr "" +msgstr "查找字段仅支持设置关联(外键)字段" #: importer/models.py:560 #, python-brace-format msgid "Invalid lookup field. Valid options are: {options}" -msgstr "" +msgstr "查找字段无效,可用选项:{options}" #: importer/models.py:567 importer/models.py:654 msgid "Import Session" @@ -4723,11 +4759,11 @@ msgstr "列" #: importer/models.py:579 msgid "Lookup Field" -msgstr "" +msgstr "查找字段" #: importer/models.py:581 msgid "Database field to use for foreign-key lookup. Leave blank for automatic lookup." -msgstr "" +msgstr "用于外键检索的数据库字段,留空则自动检索。" #: importer/models.py:658 msgid "Row Index" @@ -4737,17 +4773,17 @@ msgstr "行索引" msgid "Original row data" msgstr "原始行数据" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "错误" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "有效" #: importer/models.py:905 msgid "Multiple matches found for value - please ensure the value is unique, or select a specific lookup field" -msgstr "" +msgstr "匹配到多条结果,请确保该值唯一,或指定专用查找字段" #: importer/models.py:966 msgid "ID is required for updating existing records." @@ -4901,55 +4937,55 @@ msgstr "打印机位置" msgid "Scope the printer to a specific location" msgstr "将打印机定位到特定位置" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "设备名称" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "设备类型" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "设备类型" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "驱动" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "设备使用的驱动器" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "可以禁用设备" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "可用驱动" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "无错误" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "已初始化" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "设备状态" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "设备" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "设备配置" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "配置类型" @@ -5068,7 +5104,7 @@ msgstr "订单" msgid "Order Complete" msgstr "订单完成" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "内部零件" @@ -5114,7 +5150,7 @@ msgstr "退货订单" #: order/api.py:2421 order/models.py:3372 order/models.py:3758 #: report/templates/report/inventree_transfer_order_report.html:12 msgid "Transfer Order" -msgstr "" +msgstr "调拨单" #: order/models.py:97 #: report/templates/report/inventree_purchase_order_report.html:38 @@ -5126,11 +5162,11 @@ msgstr "总价格" msgid "Total price for this order" msgstr "此订单的总价" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "订单货币" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "此订单的货币 (留空以使用公司默认值)" @@ -5170,7 +5206,7 @@ msgstr "开始日期" msgid "Scheduled start date for this order" msgstr "本订单的预定开始日期" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "预计日期" @@ -5266,15 +5302,15 @@ msgstr "序列号不能分配给虚拟件" #: order/models.py:1347 msgid "Allow any stock (serialized or unserialized)" -msgstr "" +msgstr "允许选用所有库存(含序列号物料与无序列号物料)" #: order/models.py:1348 msgid "Serialized stock only" -msgstr "" +msgstr "仅序列号库存" #: order/models.py:1349 msgid "Unserialized stock only" -msgstr "" +msgstr "仅无序列号库存" #: order/models.py:1441 order/models.py:3003 stock/models.py:1130 #: stock/models.py:1131 stock/serializers.py:1437 @@ -5479,8 +5515,8 @@ msgstr "审核人" msgid "User who checked this shipment" msgstr "检查此装运的用户" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" @@ -5546,8 +5582,8 @@ msgstr "分配数量不能超过库存数量" msgid "Allocation quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化库存项目的数量必须为1" @@ -5641,85 +5677,53 @@ msgstr "退货订单附加行" #: order/models.py:3439 msgid "Transfer Order Reference" -msgstr "" +msgstr "调拨单号" #: order/models.py:3450 msgid "Transfer order status" -msgstr "" +msgstr "调拨单状态" #: order/models.py:3465 msgid "Source for transferred items" -msgstr "" +msgstr "转出物料来源仓库" #: order/models.py:3475 msgid "Destination for transferred items" -msgstr "" +msgstr "物料转入目标仓库" #: order/models.py:3480 msgid "Consume Stock" -msgstr "" +msgstr "消耗库存" #: order/models.py:3482 msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item" -msgstr "" +msgstr "不将库存调拨至目标仓库,而是直接消耗库存:从分配库存中扣减调拨数量" #: order/models.py:3540 msgid "Order cannot be completed until a destination location is set" -msgstr "" +msgstr "需设置目标库位后方可完成该单据" #: order/models.py:3545 msgid "Order cannot be completed until it is fully allocated" -msgstr "" +msgstr "单据需完成全部库存分配后方可办结" #: order/models.py:3739 msgid "Transfer Order Line Item" -msgstr "" +msgstr "调拨单行项目" #: order/models.py:3772 msgid "transferred" -msgstr "" +msgstr "已调拨" #: order/models.py:3773 msgid "transferred quantity" -msgstr "" +msgstr "已调拨数量" #: order/models.py:3827 msgid "Transfer Order Allocation" -msgstr "" +msgstr "调拨单分配" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "订单ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "要复制的订单ID" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "复制行" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "从原始订单复制行项目" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "复制额外行" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "从原始订单复制额外的行项目" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "复制参数" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "从原始订单复制订单参数" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5727,289 +5731,277 @@ msgstr "从原始订单复制订单参数" msgid "Line Items" msgstr "行项目" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "已完成行项目" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" -msgstr "" +msgstr "自定义状态键" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" -msgstr "" +msgstr "将此逻辑值对应的单据状态更新为自定义值" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "复制订单" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "指定复制此订单的选项" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" -msgstr "" +msgstr "自定义状态键必须为整数" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" -msgstr "" +msgstr "自定义状态键无效" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" -msgstr "" +msgstr "该单据状态对应的自定义状态键无效" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "订单ID不正确" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "供应商名称" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "订单不能取消" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "允许关闭行项目不完整的订单" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "订单中的行项目不完整" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "订单未打开" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "自动定价" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根据供应商零件数据自动计算采购价格" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "购买价格货币" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "合并项目" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "内部零件编号" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "内部零件名称" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "必须指定供应商零件" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "必须指定采购订单" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "供应商必须匹配采购订单" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "采购订单必须与供应商匹配" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "行项目" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "为收到的物品选择目的地位置" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "输入入库项目的批号" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "输入入库库存项的有效期" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "输入入库库存项目的序列号" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "覆盖传入库存项目的包装资料" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "传入库存项目的附加说明" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "条形码已被使用" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "必须提供行项目" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "必须指定目标位置" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "提供的条形码值必须是唯一的" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "配送" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "已分配的行" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "售出价格货币" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "已分配的项目" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "未提供装运详细信息" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "行项目与此订单不关联" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "数量必须为正" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "该库存项未通过所有必要的测试" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "输入要分配的序列号" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "货物已发出" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "发货与此订单无关" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "未找到以下序列号的匹配项" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "以下序列号不可用" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" -msgstr "" +msgstr "物料出库库存库位(留空则不限库位)" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" -msgstr "" +msgstr "排除该库位库存" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" -msgstr "" +msgstr "将分配明细分配至本次发货单" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" -msgstr "" +msgstr "允许从多个库位取货以满足单行物料需求" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" -msgstr "" +msgstr "序列化物料" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" -msgstr "" +msgstr "控制序列化物料是否参与自动库存分配" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" -msgstr "" +msgstr "仅对指定物料行执行库存分配(留空则分配全部物料行)" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" -msgstr "" +msgstr "该物料行不属于此单据" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "退货订单行项目" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "行项目与退货订单不匹配" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "行项目已收到" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "只能根据正在进行的订单接收物品" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "退货数量" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "行价格货币" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" -msgstr "" +msgstr "允许单据在库存未完全分配完成时结案" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" -msgstr "" +msgstr "单据存在未完成分配的物料" #: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16 msgid "Lost" @@ -6121,11 +6113,11 @@ msgstr "排除指定类别下的子类别" #: part/api.py:298 stock/api.py:469 msgid "Max Level" -msgstr "" +msgstr "最大层级" #: part/api.py:300 stock/api.py:471 msgid "Limit the depth of the category tree" -msgstr "" +msgstr "限制物料分类树层级深度" #: part/api.py:442 msgid "Has Results" @@ -6147,59 +6139,59 @@ msgstr "有修订版本" msgid "BOM Valid" msgstr "物料清单合规" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "级联分类" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "如果为真,则包含给定分类下的所有子分类中的项目" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "按数字分类ID或字面值 \"null\" 进行筛选" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "装配零件已启用" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "装配零件可追踪" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "装配部份是可测试的" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "装配零件已锁定" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "元器件已激活" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "该零部件可追溯" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "组件部份是可测试的" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "该零部件是一个装配件" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "该零部件为虚拟件" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "有可用库存" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "使用" @@ -6212,7 +6204,7 @@ msgstr "零件类别" msgid "Part Categories" msgstr "零件类别" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "默认位置" @@ -6261,674 +6253,678 @@ msgstr "默认值" msgid "Default Parameter Value" msgstr "默认参数值" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "零件" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "无法删除已锁定零件的参数" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "无法修改已锁定零件的参数" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "无法删除这个零件,因为它已被锁定" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "无法删除这个零件,因为它仍然处于活动状态" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "无法删除这个零件,因为它被使用在了装配中" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "零件 \"{self}\" 不能用在 \"{parent}\" 的物料清单 (递归)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "零件 \"{parent}\" 被使用在了 \"{self}\" 的物料清单 (递归)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "内部零件号必须匹配正则表达式 {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "零件不能是对自身的修订" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "标记为带版本管理的物料必须指定版本代码" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "修订仅对装配零件允许" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "无法对模版零件进行修订" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "上级零件必须指向相同的模版" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "该序列号库存项己存在" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件设置中不允许重复的内部零件号" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "重复的零件修订版本已经存在。" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "有这个名字,内部零件号,和修订版本的零件已经存在" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到结构性零件类别!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "零件名称" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "是模板" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "这个零件是一个模版零件吗?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "这个零件是另一零件的变体吗?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "变体" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "零件描述(可选)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "关键词" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的零件关键字" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "零件类别" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "内部零件号 IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "零件修订版本或版本号" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "版本" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "这零件是另一零件的修订版本吗?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "修订版本" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "该物品通常存放在哪里?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "默认到期" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件库存项的过期时间 (天)" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "最低库存" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "允许的最小库存量" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "最大库存" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "最大允许库存水平" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "此零件的计量单位" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "这个零件可由其他零件加工而成吗?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "这个零件可用于创建其他零件吗?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追踪功能" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "这一部件能否记录到测试结果?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "这个零件可从外部供应商购买吗?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "此零件可以销售给客户吗?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "这个零件是否已激活?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "无法编辑锁定的零件" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟零件,例如一个软件产品或许可证吗?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "物料清单已验证" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "该零件的物料清单是否通过验证?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "物料清单校验和" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "保存的物料清单校验和" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "物料清单检查人" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "物料清单检查日期" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "此零件的负责人" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "出售多个" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "用于缓存定价计算的货币" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "最低物料清单成本" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "物料清单的最高成本" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "最低购买成本" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "最大购买成本" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "最低内部价格" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "基于内部批发价的最低成本" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "最大内部价格" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "基于内部批发价的最高成本" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "供应商最低价格" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "外部供应商零件的最低价格" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "供应商最高价格" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "来自外部供应商的商零件的最高价格" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "最小变体成本" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "计算出的变体零件的最低成本" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "最大变体成本" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "计算出的变体零件的最大成本" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "覆盖最低成本" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "覆盖最大成本" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "计算总最低成本" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "计算总最大成本" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "最低售出价格" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "基于批发价的最低售出价格" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "最高售出价格" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "基于批发价的最大售出价格" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "最低销售成本" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "历史最低售出价格" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "最高销售成本" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "历史最高售出价格" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "用于盘点的零件" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "物品数量" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "盘点时的个别库存条目数" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "盘点时可用库存总额" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "日期" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "进行盘点的日期" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "最低库存成本" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "现有存库存最低成本估算" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "最高库存成本" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "目前库存最高成本估算" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "零件售出价格折扣" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "零件测试模板" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名称无效 - 必须包含至少一个字母或者数字" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "测试模板只能为可拆分的部件创建" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主键的测试模板" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "测试名" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "输入测试的名称" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "测试主键" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "简化测试主键" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "测试说明" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "输入测试的描述" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "此测试是否已启用?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "必须的" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "需要此测试才能通过吗?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "添加测试结果时是否需要一个值?" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加测试结果时是否需要文件附件?" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "此测试的有效选择 (逗号分隔)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "数量无效 - 未指定零件的单位" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "数量必须大于或等于零" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清单项目不能被修改 - 装配已锁定" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清单项目不能修改 - 变体装配已锁定" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "选择父零件" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "子零件" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "选择要用于物料清单的零件" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "数量" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "生产一个部件所消耗的子零件数量" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "此物料清单项目的数量" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "此物料清单项目是可选的" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "设置数量" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "为补偿生产准备损耗所需的额外数量" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "损耗" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "生产预估损耗率(百分比,0-100)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "舍入倍数" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "将所需生产数量向上舍入至该值的最接近倍数" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "物料清单项目引用" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "物料清单项目注释" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "校验和" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "物料清单行校验和" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "已验证" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "此物料清单项目已验证" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "获取继承的" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清单项目是由物料清单继承的变体零件" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "变体零件的库存项可以用于此物料清单项目" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "可追踪零件的数量必须是整数" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "必须指定子零件" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "物料清单项目替代品" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能与主零件相同" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "上级物料清单项目" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "零件2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "选择相关的零件" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "此关系的注释" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "零件关系不能在零件和自身之间创建" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "复制关系已经存在" #: part/serializers.py:66 msgid "Delete Subcategories" -msgstr "" +msgstr "删除所有子分类" #: part/serializers.py:67 msgid "Delete all sub-categories contained within this category" -msgstr "" +msgstr "删除当前分类下包含的所有子分类" #: part/serializers.py:72 msgid "Delete Parts" -msgstr "" +msgstr "删除零件" #: part/serializers.py:73 msgid "Delete all parts contained within this category" -msgstr "" +msgstr "删除该分类下包含的全部零件" #: part/serializers.py:130 msgid "Parent Category" @@ -6958,331 +6954,319 @@ msgstr "购买此库存项的货币" msgid "File is not an image" msgstr "文件不是一个图片" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "原始零件" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "选择要复制的原始零件" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "复制图片" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "从原零件复制图片" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "复制物料清单" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "从原始零件复制材料清单" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "从原始零件复制参数数据" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "复制备注" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "从原始零件复制备注" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "复制测试" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "从原始零件复制测试模板" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "初始化库存数量" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "初始化库存地点" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的库存地点" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "选择供应商(或为空以跳过)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "选择制造商(或为空)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "制造商零件号" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "所选公司不是一个有效的供应商" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "所选公司不是一个有效的制造商" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "类别名称" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "正在生产" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "目前正在生产的零件数量" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件计划待产数量" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "库存项" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "修订" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "库存总量" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "未分配的库存" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "变体库存" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "重复零件" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "从另一个零件复制初始数据" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "复制图片" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "从原零件复制图片" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "复制物料清单" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "从原始零件复制材料清单" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "复制备注" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "从原始零件复制备注" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "复制测试" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "从原始零件复制测试模板" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "初始库存" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "创建具有初始库存数量的零件" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "供应商信息" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供应商信息" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "从选择的零件复制参数模版" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "现有的图片" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "现有零件图片的文件名" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "图片不存在" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "验证整个物料清单" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "可以创建" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "生产订单必填项" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "分配到生产订单" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "销售订单必填项" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "分配到销售订单" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "内部零件号" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "零件描述" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "选择一个物料,以生成该物料(及其所有变型物料)的盘点信息" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "选择一个分类,以包含该分类(及其子分类)下的所有物料" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "选择一个库位,以包含该库位(含子库位)中有库存的所有物料" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "生成盘点条目" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "保存所选物料的盘点条目" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "生成报告" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "为所选物料生成盘点报告" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "最低价格" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "覆盖已计算的最低价格值" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "最低价格货币" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "最高价格" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "覆盖已计算的最高价格值" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "最高价格货币" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "更新" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "更新这个零件的价格" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "无法将所提供的货币转换为 {default_currency}" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "最低价格不能高于最高价格。" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "最高价格不能低于最低价格" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "此商品所需数量(可包含单位)" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "选择父装配" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "选择零部件" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "无效的数量格式" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "选择要复制物料清单的零件" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "移除现有数据" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "复制前删除现有的物料清单项目" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "包含继承的" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "包含从模板零件继承的物料清单项目" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "跳过无效行" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "启用此选项以跳过无效行" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "复制替代品零件" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "复制物料清单项目时复制替代品零件" @@ -7399,11 +7383,11 @@ msgstr "项目已被接收" #: plugin/base/barcodes/api.py:601 msgid "Purchase order Found\\rNo supplier Part Match" -msgstr "" +msgstr "已找到采购订单\\r但无匹配供应商零件" #: plugin/base/barcodes/api.py:607 msgid "Supplier Part Found\\rNo Purchase Order Match" -msgstr "" +msgstr "已匹配到供应商零件\\r但未找到对应采购订单" #: plugin/base/barcodes/api.py:643 msgid "No plugin match for supplier barcode" @@ -7599,7 +7583,7 @@ msgid "Provides native support for barcodes" msgstr "提供条形码本地支持" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7643,11 +7627,11 @@ msgstr "短条形码前缀" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "自定义用于短条形码的前缀,可能对有多个InvenTree实例的环境有用。" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "自动创建生产单" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "为装配件自动创建生产订单" @@ -7846,15 +7830,15 @@ msgstr "包含变体项" #: plugin/builtin/exporter/stocktake_exporter.py:32 msgid "Include part variant stock in stocktake data" -msgstr "" +msgstr "盘点数据包含零件变体库存" #: plugin/builtin/exporter/stocktake_exporter.py:37 msgid "Exclude Zero Stock Entries" -msgstr "" +msgstr "排除零库存条目" #: plugin/builtin/exporter/stocktake_exporter.py:38 msgid "Exclude parts with zero stock from the exported dataset" -msgstr "" +msgstr "导出数据集中剔除库存为零的零件" #: plugin/builtin/exporter/stocktake_exporter.py:50 msgid "Part Stocktake Exporter" @@ -8462,7 +8446,7 @@ msgstr "从数据库中删除插件配置" #: plugin/serializers.py:292 msgid "Indicates if the setting is overridden by configuration" -msgstr "" +msgstr "标识该配置项是否被外部配置覆盖" #: plugin/serializers.py:312 msgid "The user for which this setting applies" @@ -8482,7 +8466,7 @@ msgstr "插件不支持标签打印" #: report/api.py:170 report/api.py:279 msgid "You do not have permission to view this model type" -msgstr "" +msgstr "你暂无查看该数据模型类型的权限" #: report/api.py:174 msgid "Invalid label dimensions" @@ -8791,7 +8775,7 @@ msgstr "没有结果" #: report/templates/report/inventree_transfer_order_report.html:28 msgid "Transferred" -msgstr "" +msgstr "已调拨" #: report/templatetags/report.py:192 msgid "Invalid media file path" @@ -8911,7 +8895,7 @@ msgstr "盘点时间晚于" #: stock/api.py:960 msgid "Has Stocktake Date" -msgstr "" +msgstr "存在盘点日期" #: stock/api.py:971 msgid "Expiry date before" @@ -9044,23 +9028,23 @@ msgstr "您不能将此库存地点设置为结构性,因为某些库存项已 #: stock/models.py:412 msgid "Oldest stock first (FIFO)" -msgstr "" +msgstr "先进先出(优先取用最早入库库存)" #: stock/models.py:413 msgid "Newest stock first (LIFO)" -msgstr "" +msgstr "后进先出(优先取用最新入库库存)" #: stock/models.py:414 msgid "Smallest quantity first" -msgstr "" +msgstr "优先取用数量最少的库存批次" #: stock/models.py:415 msgid "Largest quantity first" -msgstr "" +msgstr "优先取用数量最多的库存批次" #: stock/models.py:416 msgid "Soonest expiry date first" -msgstr "" +msgstr "优先取用最早过期批次" #: stock/models.py:559 msgid "Serialized stock items cannot be deleted" @@ -9081,7 +9065,7 @@ msgstr "库存项不能存放在结构性库存地点!" #: stock/models.py:966 msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" -msgstr "" +msgstr "不允许编辑序列号:该物料条目已分配序列号" #: stock/models.py:983 stock/serializers.py:474 msgid "Stock item cannot be created for virtual parts" @@ -9186,7 +9170,7 @@ msgstr "库存物品的到期日。在此日期之后,库存将被视为过期 #: stock/models.py:1234 msgid "Date that this stock item was created" -msgstr "" +msgstr "该库存条目创建日期" #: stock/models.py:1239 msgid "Delete on deplete" @@ -9455,8 +9439,8 @@ msgstr "未提供库存项" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量不得超过现有库存量 ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "目标库存位置" @@ -9534,19 +9518,19 @@ msgstr "子位置" #: stock/serializers.py:1194 msgid "Delete Stock Items" -msgstr "" +msgstr "删除库存条目" #: stock/serializers.py:1195 msgid "Delete all stock items contained within this location" -msgstr "" +msgstr "删除当前库位下全部库存条目" #: stock/serializers.py:1200 msgid "Delete Sublocations" -msgstr "" +msgstr "删除下级子库位" #: stock/serializers.py:1201 msgid "Delete all sub-locations contained within this location" -msgstr "" +msgstr "删除当前库位下所有下级子库位" #: stock/serializers.py:1264 msgid "Parent stock location" @@ -9562,7 +9546,7 @@ msgstr "物料已分配到销售订单" #: stock/serializers.py:1410 msgid "Item is allocated to a transfer order" -msgstr "" +msgstr "该物料已分配至库存调拨单" #: stock/serializers.py:1414 msgid "Item is allocated to a build order" @@ -9628,13 +9612,13 @@ msgstr "库存项已有现货" msgid "Quantity must not be negative" msgstr "数量不得为负" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "合并至现有库存" #: stock/serializers.py:1730 msgid "Merge this item into existing stock at the destination if possible" -msgstr "" +msgstr "条件允许时,将该库存合并至目标库位已有同物料库存" #: stock/serializers.py:1749 msgid "Stock transaction notes" @@ -9642,17 +9626,22 @@ msgstr "库存交易记录" #: stock/serializers.py:1778 msgid "Set stock location for counted items (optional)" -msgstr "" +msgstr "为已盘点物料指定库存位置(可选)" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "结构型库位不允许存放库存物料" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "若可行,将退回项目合并至现有库存项" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "下一个序列号" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "上一个序列号" @@ -10140,7 +10129,7 @@ msgstr "退货订单" #: users/ruleset.py:38 msgid "Transfer Orders" -msgstr "" +msgstr "调拨单" #: users/serializers.py:186 msgid "Username" 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 44b4892756..f31b012013 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-06-30 09:04+0000\n" -"PO-Revision-Date: 2026-06-30 09:06\n" +"POT-Creation-Date: 2026-07-06 12:10+0000\n" +"PO-Revision-Date: 2026-07-06 12:13\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -89,7 +89,7 @@ msgstr "不能將 {original} 轉換到 {unit}" #: InvenTree/conversion.py:289 InvenTree/conversion.py:303 #: InvenTree/helpers.py:612 order/models.py:798 order/models.py:1093 -#: part/models.py:3999 +#: part/models.py:4003 msgid "Invalid quantity provided" msgstr "提供的數量無效" @@ -97,16 +97,16 @@ msgstr "提供的數量無效" msgid "Error details can be found in the admin panel" msgstr "在管理面板中可以找到錯誤詳細信息" -#: InvenTree/fields.py:146 +#: InvenTree/fields.py:175 msgid "Enter date" msgstr "輸入日期" -#: InvenTree/fields.py:169 +#: InvenTree/fields.py:198 msgid "Invalid decimal value" msgstr "無效的十進位數值" -#: InvenTree/fields.py:218 InvenTree/models.py:1251 build/serializers.py:499 -#: build/serializers.py:549 build/serializers.py:1744 company/models.py:824 +#: InvenTree/fields.py:247 InvenTree/models.py:1251 build/serializers.py:534 +#: build/serializers.py:586 build/serializers.py:1757 company/models.py:824 #: order/models.py:2039 #: report/templates/report/inventree_build_order_report.html:172 #: stock/models.py:3119 stock/models.py:3243 stock/serializers.py:749 @@ -272,18 +272,18 @@ msgstr "參考編號過大" msgid "Invalid choice" msgstr "無效的選項" -#: InvenTree/models.py:1040 common/models.py:1449 common/models.py:1876 -#: common/models.py:2309 common/models.py:2434 common/models.py:2731 +#: InvenTree/models.py:1040 common/models.py:1455 common/models.py:1882 +#: common/models.py:2315 common/models.py:2440 common/models.py:2737 #: common/serializers.py:679 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1106 plugin/models.py:54 +#: machine/models.py:28 part/models.py:1107 plugin/models.py:54 #: report/models.py:222 stock/models.py:87 msgid "Name" msgstr "名稱" -#: InvenTree/models.py:1046 build/models.py:265 common/models.py:180 -#: common/models.py:2441 common/models.py:2582 common/models.py:2746 +#: InvenTree/models.py:1046 build/models.py:262 common/models.py:180 +#: common/models.py:2447 common/models.py:2588 common/models.py:2752 #: company/models.py:559 company/models.py:815 order/models.py:487 -#: order/models.py:2084 part/models.py:1129 report/models.py:228 +#: order/models.py:2084 part/models.py:1130 report/models.py:228 #: report/models.py:872 report/models.py:898 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:93 @@ -294,7 +294,7 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(選填)" -#: InvenTree/models.py:1062 common/models.py:3056 +#: InvenTree/models.py:1062 common/models.py:3062 msgid "Path" msgstr "路徑" @@ -334,7 +334,7 @@ msgstr "伺服器錯誤" msgid "An error has been logged by the server." msgstr "伺服器紀錄了一個錯誤。" -#: InvenTree/models.py:1541 common/models.py:1787 +#: InvenTree/models.py:1541 common/models.py:1793 #: 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 @@ -345,11 +345,11 @@ msgstr "圖像" msgid "Must be a valid number" msgstr "必須是有效的數字" -#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3375 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3379 msgid "Currency" msgstr "貨幣" -#: InvenTree/serializers.py:408 part/serializers.py:1418 +#: InvenTree/serializers.py:408 part/serializers.py:1385 msgid "Select currency from available options" msgstr "從可用選項中選擇貨幣" @@ -373,6 +373,46 @@ msgstr "內容類型未發現" msgid "Content type does not match required mixin class" msgstr "內容類型與所需的 mixin 類別不符" +#: InvenTree/serializers.py:937 +msgid "Copy Parameters" +msgstr "複製參數" + +#: InvenTree/serializers.py:938 +msgid "Copy parameters from the original item" +msgstr "" + +#: InvenTree/serializers.py:943 +msgid "Copy Lines" +msgstr "複製行" + +#: InvenTree/serializers.py:944 +msgid "Copy line items from the original order" +msgstr "從原始訂單複製行項目" + +#: InvenTree/serializers.py:949 +msgid "Copy Extra Lines" +msgstr "複製額外行" + +#: InvenTree/serializers.py:950 +msgid "Copy extra line items from the original order" +msgstr "從原始訂單複製額外的行項目" + +#: InvenTree/serializers.py:974 +msgid "Duplication Options" +msgstr "" + +#: InvenTree/serializers.py:976 +msgid "Specify options for duplicating this item" +msgstr "" + +#: InvenTree/serializers.py:1014 +msgid "Original" +msgstr "" + +#: InvenTree/serializers.py:1015 +msgid "Select instance to duplicate" +msgstr "" + #: InvenTree/setting/locales.py:20 msgid "Arabic" msgstr "阿拉伯語" @@ -542,31 +582,31 @@ msgid "Not a valid currency code" msgstr "無效的貨幣代碼" #: build/api.py:57 order/api.py:118 order/api.py:287 order/api.py:1442 -#: order/serializers.py:128 +#: order/serializers.py:95 msgid "Order Status" msgstr "訂單狀態" -#: build/api.py:83 build/models.py:277 +#: build/api.py:83 build/models.py:274 msgid "Parent Build" msgstr "上層生產工單" -#: build/api.py:87 build/api.py:1042 order/api.py:564 order/api.py:789 +#: build/api.py:87 build/api.py:1055 order/api.py:564 order/api.py:789 #: order/api.py:1235 order/api.py:1546 order/api.py:1837 order/api.py:2027 #: stock/api.py:593 msgid "Include Variants" msgstr "包含變體" -#: build/api.py:103 build/api.py:477 build/api.py:1056 build/models.py:283 -#: build/serializers.py:1169 build/serializers.py:1345 -#: build/serializers.py:1438 company/models.py:1034 company/serializers.py:426 +#: build/api.py:103 build/api.py:490 build/api.py:1069 build/models.py:280 +#: build/serializers.py:1182 build/serializers.py:1358 +#: build/serializers.py:1451 company/models.py:1034 company/serializers.py:473 #: order/api.py:315 order/api.py:319 order/api.py:946 order/api.py:1248 #: order/api.py:1251 order/api.py:2040 order/api.py:2043 order/api.py:2197 #: order/models.py:2216 order/models.py:2384 order/models.py:2385 -#: order/models.py:3766 order/models.py:3767 part/api.py:1167 part/api.py:1170 -#: part/api.py:1387 part/models.py:527 part/models.py:3386 part/models.py:3529 -#: part/models.py:3587 part/models.py:3608 part/models.py:3630 -#: part/models.py:3771 part/models.py:4093 part/models.py:4520 -#: part/serializers.py:1367 part/serializers.py:2031 +#: order/models.py:3766 order/models.py:3767 part/api.py:1169 part/api.py:1172 +#: part/api.py:1389 part/models.py:528 part/models.py:3390 part/models.py:3533 +#: part/models.py:3591 part/models.py:3612 part/models.py:3634 +#: part/models.py:3775 part/models.py:4097 part/models.py:4530 +#: part/serializers.py:1334 part/serializers.py:1998 #: 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 @@ -587,9 +627,9 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:123 build/api.py:126 build/serializers.py:1452 part/api.py:1001 -#: part/api.py:1398 part/models.py:412 part/models.py:1147 part/models.py:3658 -#: part/serializers.py:1377 part/serializers.py:1802 stock/api.py:893 +#: build/api.py:123 build/api.py:126 build/serializers.py:1465 part/api.py:1003 +#: part/api.py:1400 part/models.py:412 part/models.py:1148 part/models.py:3662 +#: part/serializers.py:1344 part/serializers.py:1769 stock/api.py:893 msgid "Category" msgstr "類別" @@ -661,125 +701,126 @@ msgstr "排除樹" msgid "Build must be cancelled before it can be deleted" msgstr "工單必須被取消才能被刪除" -#: build/api.py:460 build/serializers.py:1379 part/models.py:4135 +#: build/api.py:460 build/serializers.py:1392 part/models.py:1314 +#: part/models.py:4139 msgid "Consumable" msgstr "耗材" -#: build/api.py:463 build/serializers.py:1382 part/models.py:4129 +#: build/api.py:476 build/serializers.py:1395 part/models.py:4133 msgid "Optional" msgstr "非必須項目" -#: build/api.py:466 build/serializers.py:1424 common/setting/system.py:476 -#: part/models.py:1261 part/serializers.py:1747 part/serializers.py:1773 +#: build/api.py:479 build/serializers.py:1437 common/setting/system.py:476 +#: part/models.py:1262 part/serializers.py:1714 part/serializers.py:1740 #: stock/api.py:659 msgid "Assembly" msgstr "裝配" -#: build/api.py:469 +#: build/api.py:482 msgid "Tracked" msgstr "追蹤中" -#: build/api.py:472 build/serializers.py:1385 part/models.py:1279 +#: build/api.py:485 build/serializers.py:1398 part/models.py:1280 msgid "Testable" msgstr "可測試" -#: build/api.py:482 order/api.py:1010 order/api.py:1432 order/api.py:2261 +#: build/api.py:495 order/api.py:1010 order/api.py:1432 order/api.py:2261 msgid "Order Outstanding" msgstr "訂單未完成" -#: build/api.py:492 build/serializers.py:1481 order/api.py:969 +#: build/api.py:505 build/serializers.py:1494 order/api.py:969 #: order/api.py:2220 msgid "Allocated" msgstr "已分配" -#: build/api.py:517 build/models.py:1741 build/serializers.py:1398 +#: build/api.py:530 build/models.py:1772 build/serializers.py:1411 msgid "Consumed" msgstr "已消耗" -#: build/api.py:526 company/models.py:879 company/serializers.py:403 +#: build/api.py:539 company/models.py:879 company/serializers.py:450 #: 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:567 build/serializers.py:1483 company/serializers.py:400 -#: order/serializers.py:1388 order/serializers.py:2741 part/serializers.py:900 -#: part/serializers.py:1228 part/serializers.py:1811 +#: build/api.py:580 build/serializers.py:1496 company/serializers.py:447 +#: order/serializers.py:1356 order/serializers.py:2744 part/serializers.py:841 +#: part/serializers.py:1195 part/serializers.py:1778 msgid "On Order" msgstr "已訂購" -#: build/api.py:720 +#: build/api.py:733 msgid "Build not found" msgstr "找不到生產記錄" -#: build/api.py:1079 build/models.py:120 order/models.py:2249 +#: build/api.py:1092 build/models.py:117 order/models.py:2249 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:94 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生產工單" -#: build/api.py:1093 build/api.py:1097 build/serializers.py:374 -#: build/serializers.py:487 build/serializers.py:536 build/serializers.py:1219 -#: build/serializers.py:1225 order/api.py:1295 order/api.py:1300 -#: order/api.py:2079 order/api.py:2084 order/serializers.py:886 -#: order/serializers.py:1026 order/serializers.py:2314 part/serializers.py:1387 +#: build/api.py:1106 build/api.py:1110 build/serializers.py:409 +#: build/serializers.py:522 build/serializers.py:573 build/serializers.py:1232 +#: build/serializers.py:1238 order/api.py:1295 order/api.py:1300 +#: order/api.py:2079 order/api.py:2084 order/serializers.py:847 +#: order/serializers.py:987 order/serializers.py:2312 part/serializers.py:1354 #: stock/api.py:1028 stock/serializers.py:112 stock/serializers.py:622 #: stock/serializers.py:742 stock/serializers.py:920 stock/serializers.py:1533 -#: stock/serializers.py:1777 stock/serializers.py:1881 -#: stock/serializers.py:1972 templates/email/stale_stock_notification.html:18 +#: stock/serializers.py:1777 stock/serializers.py:1890 +#: stock/serializers.py:1990 templates/email/stale_stock_notification.html:18 #: users/models.py:545 msgid "Location" msgstr "地點" -#: build/api.py:1105 part/serializers.py:1412 +#: build/api.py:1118 part/serializers.py:1379 msgid "Output" msgstr "產出" -#: build/api.py:1107 +#: build/api.py:1120 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "依產出庫存項目 ID 篩選。使用 'null' 尋找未安裝的生產項目。" -#: build/models.py:121 users/ruleset.py:34 +#: build/models.py:118 users/ruleset.py:34 msgid "Build Orders" msgstr "生產工單" -#: build/models.py:181 +#: build/models.py:178 msgid "Assembly BOM has not been validated" msgstr "裝配物料清單尚未驗證" -#: build/models.py:188 +#: build/models.py:185 msgid "Build order cannot be created for an inactive part" msgstr "無法為未激活的零件創建生產訂單" -#: build/models.py:195 +#: build/models.py:192 msgid "Build order cannot be created for an unlocked part" msgstr "無法為已解鎖的零件創建生產訂單" -#: build/models.py:213 +#: build/models.py:210 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "只有可採購的零件,生產工單才可進行外部履行" -#: build/models.py:220 order/models.py:402 +#: build/models.py:217 order/models.py:402 msgid "Responsible user or group must be specified" msgstr "必須指定負責的用户或組" -#: build/models.py:225 +#: build/models.py:222 msgid "Build order part cannot be changed" msgstr "無法更改生產工單" -#: build/models.py:230 order/models.py:420 +#: build/models.py:227 order/models.py:420 msgid "Target date must be after start date" msgstr "目標日期必須晚於開始日期" -#: build/models.py:258 +#: build/models.py:255 msgid "Build Order Reference" msgstr "生產工單代號" -#: build/models.py:259 build/serializers.py:1376 order/models.py:697 +#: build/models.py:256 build/serializers.py:1389 order/models.py:697 #: order/models.py:1429 order/models.py:2032 order/models.py:2991 -#: order/models.py:3440 part/models.py:4175 +#: order/models.py:3440 part/models.py:4179 #: 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 @@ -788,224 +829,219 @@ msgstr "生產工單代號" msgid "Reference" msgstr "參考代號" -#: build/models.py:268 +#: build/models.py:265 msgid "Brief description of the build (optional)" msgstr "關於生產工單的簡單説明(選填)" -#: build/models.py:278 +#: build/models.py:275 msgid "Build Order to which this build is allocated" msgstr "分配此生產的生產訂單" -#: build/models.py:287 +#: build/models.py:284 msgid "Select part to build" msgstr "選擇要生產的零件" -#: build/models.py:292 +#: build/models.py:289 msgid "Sales Order Reference" msgstr "銷售訂單代號" -#: build/models.py:297 +#: build/models.py:294 msgid "Sales Order to which this build is allocated" msgstr "分配此生產的銷售訂單" -#: build/models.py:302 build/serializers.py:1030 order/models.py:3460 -#: order/serializers.py:2061 +#: build/models.py:299 build/serializers.py:1043 order/models.py:3460 +#: order/serializers.py:2051 msgid "Source Location" msgstr "來源倉儲地點" -#: build/models.py:308 +#: build/models.py:305 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "選擇領取料件的倉儲地點(留白表示可以從任何地點領取)" -#: build/models.py:314 +#: build/models.py:311 msgid "External Build" msgstr "外部生產" -#: build/models.py:315 +#: build/models.py:312 msgid "This build order is fulfilled externally" msgstr "此生產工單由外部履行" -#: build/models.py:320 order/models.py:3470 +#: build/models.py:317 order/models.py:3470 msgid "Destination Location" msgstr "目標倉儲地點" -#: build/models.py:325 +#: build/models.py:322 msgid "Select location where the completed items will be stored" msgstr "選擇已完成項目庫存地點" -#: build/models.py:329 +#: build/models.py:326 msgid "Build Quantity" msgstr "生產數量" -#: build/models.py:332 +#: build/models.py:329 msgid "Number of stock items to build" msgstr "要生產的項目數量" -#: build/models.py:336 +#: build/models.py:333 msgid "Completed items" msgstr "已完成項目" -#: build/models.py:338 +#: build/models.py:335 msgid "Number of stock items which have been completed" msgstr "已經完成的庫存品數量" -#: build/models.py:342 +#: build/models.py:339 msgid "Build Status" msgstr "生產狀態" -#: build/models.py:347 +#: build/models.py:344 msgid "Build status code" msgstr "生產狀態代碼" -#: build/models.py:356 build/serializers.py:361 order/serializers.py:902 +#: build/models.py:353 build/serializers.py:396 order/serializers.py:863 #: stock/models.py:1152 stock/serializers.py:86 stock/serializers.py:1706 msgid "Batch Code" msgstr "批號" -#: build/models.py:360 build/serializers.py:362 +#: build/models.py:357 build/serializers.py:397 msgid "Batch code for this build output" msgstr "此產出的批號" -#: build/models.py:364 order/models.py:524 order/serializers.py:193 -#: part/models.py:1342 stock/models.py:1233 +#: build/models.py:361 order/models.py:524 order/serializers.py:160 +#: part/models.py:1349 stock/models.py:1233 msgid "Creation Date" msgstr "建立日期" -#: build/models.py:370 +#: build/models.py:367 msgid "Build start date" msgstr "生產開始日期" -#: build/models.py:371 +#: build/models.py:368 msgid "Scheduled start date for this build order" msgstr "預計此生產工單的開始日期" -#: build/models.py:377 +#: build/models.py:374 msgid "Target completion date" msgstr "目標完成日期" -#: build/models.py:379 +#: build/models.py:376 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生產的預計完成日期。若超過此日期則工單會逾期。" -#: build/models.py:384 order/models.py:745 order/models.py:3030 +#: build/models.py:381 order/models.py:745 order/models.py:3030 #: order/models.py:3489 msgid "Completion Date" msgstr "完成日期" -#: build/models.py:392 +#: build/models.py:389 msgid "completed by" msgstr "完成者" -#: build/models.py:401 +#: build/models.py:398 msgid "Issued by" msgstr "發布者" -#: build/models.py:402 +#: build/models.py:399 msgid "User who issued this build order" msgstr "發布此生產工單的使用者" -#: build/models.py:419 common/models.py:195 order/api.py:186 -#: order/models.py:556 part/models.py:1359 +#: build/models.py:416 common/models.py:195 order/api.py:186 +#: order/models.py:556 part/models.py:1366 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "負責人" -#: build/models.py:420 +#: build/models.py:417 msgid "User or group responsible for this build order" msgstr "負責此生產工單的使用者或羣組" -#: build/models.py:425 stock/models.py:1145 +#: build/models.py:422 stock/models.py:1145 msgid "External Link" msgstr "外部連結" -#: build/models.py:427 common/models.py:2130 part/models.py:1181 +#: build/models.py:424 common/models.py:2136 part/models.py:1182 #: stock/models.py:1147 msgid "Link to external URL" msgstr "外部URL連結" -#: build/models.py:432 +#: build/models.py:429 msgid "Build Priority" msgstr "製造優先度" -#: build/models.py:435 +#: build/models.py:432 msgid "Priority of this build order" msgstr "此生產工單的優先程度" -#: build/models.py:443 common/models.py:159 common/models.py:173 +#: build/models.py:440 common/models.py:159 common/models.py:173 #: order/api.py:172 order/models.py:496 order/models.py:2064 msgid "Project Code" msgstr "專案代碼" -#: build/models.py:444 +#: build/models.py:441 msgid "Project code for this build order" msgstr "此生產工單隸屬的專案代碼" -#: build/models.py:696 +#: build/models.py:693 msgid "Cannot complete build order with open child builds" msgstr "無法完成仍有未結束子工單的生產工單" -#: build/models.py:701 +#: build/models.py:698 msgid "Cannot complete build order with incomplete outputs" msgstr "無法完成有未完成產出的生產工單" -#: build/models.py:863 build/serializers.py:409 +#: build/models.py:860 build/serializers.py:444 msgid "Serial numbers must be provided for trackable parts" msgstr "對於可跟蹤的零件,必須提供序列號" -#: build/models.py:955 build/models.py:1043 +#: build/models.py:952 build/models.py:1042 msgid "No build output specified" msgstr "未指定產出" -#: build/models.py:958 +#: build/models.py:955 msgid "Build output is already completed" msgstr "產出已完成" -#: build/models.py:961 +#: build/models.py:958 msgid "Build output does not match Build Order" msgstr "產出與生產訂單不匹配" -#: build/models.py:1050 build/models.py:1156 build/serializers.py:287 -#: build/serializers.py:337 build/serializers.py:898 build/serializers.py:1695 -#: order/models.py:795 order/serializers.py:672 order/serializers.py:897 -#: part/models.py:3983 stock/models.py:992 stock/models.py:1489 +#: build/models.py:1049 build/models.py:1142 build/serializers.py:318 +#: build/serializers.py:372 build/serializers.py:911 build/serializers.py:1708 +#: order/models.py:795 order/serializers.py:633 order/serializers.py:858 +#: part/models.py:3987 stock/models.py:992 stock/models.py:1489 #: stock/models.py:1990 stock/serializers.py:720 stock/serializers.py:1695 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" -#: build/models.py:1054 build/models.py:1161 build/serializers.py:292 +#: build/models.py:1053 build/models.py:1147 build/serializers.py:323 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於輸出數量" -#: build/models.py:1129 build/serializers.py:575 +#: build/models.py:1121 msgid "Build output has not passed all required tests" msgstr "此產出尚未通過所有必要測試" -#: build/models.py:1132 build/serializers.py:570 -#, python-brace-format -msgid "Build output {serial} has not passed all required tests" -msgstr "產出 {serial} 未通過所有必要測試" - -#: build/models.py:1143 +#: build/models.py:1129 msgid "Allocated stock items are still in production" msgstr "已分配的庫存項目仍在生產中" -#: build/models.py:1151 +#: build/models.py:1136 msgid "Cannot partially complete a build output with allocated items" msgstr "無法部分完成具有已分配項目的生產產出" -#: build/models.py:1695 +#: build/models.py:1726 msgid "Build Order Line Item" msgstr "生產訂單行項目" -#: build/models.py:1720 +#: build/models.py:1751 msgid "Build object" msgstr "生產對象" -#: build/models.py:1732 build/models.py:2057 build/serializers.py:273 -#: build/serializers.py:322 build/serializers.py:1397 common/models.py:1379 +#: build/models.py:1763 build/models.py:2088 build/serializers.py:304 +#: build/serializers.py:357 build/serializers.py:1410 common/models.py:1379 #: order/models.py:2004 order/models.py:2873 order/models.py:3914 -#: order/serializers.py:1841 order/serializers.py:2407 -#: order/serializers.py:2978 part/models.py:3543 part/models.py:4123 +#: order/serializers.py:1831 order/serializers.py:2405 +#: order/serializers.py:2981 part/models.py:3547 part/models.py:4127 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,456 +1060,456 @@ msgstr "生產對象" msgid "Quantity" msgstr "數量" -#: build/models.py:1733 +#: build/models.py:1764 msgid "Required quantity for build order" msgstr "生產工單所需數量" -#: build/models.py:1742 +#: build/models.py:1773 msgid "Quantity of consumed stock" msgstr "已消耗庫存數量" -#: build/models.py:1843 +#: build/models.py:1874 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生產項必須指定產出,因為主零件已經被標記為可追蹤的" -#: build/models.py:1906 +#: build/models.py:1937 msgid "Selected stock item does not match BOM line" msgstr "選擇的庫存品項和BOM的項目不符" -#: build/models.py:1925 +#: build/models.py:1956 msgid "Allocated quantity must be greater than zero" msgstr "分配數量必須大於零" -#: build/models.py:1931 +#: build/models.py:1962 msgid "Quantity must be 1 for serialized stock" msgstr "有序號的品項數量必須為1" -#: build/models.py:1941 +#: build/models.py:1972 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配的數量({q})不能超過可用的庫存數量({a})" -#: build/models.py:1958 order/models.py:2822 order/models.py:3878 +#: build/models.py:1989 order/models.py:2822 order/models.py:3878 msgid "Stock item is over-allocated" msgstr "庫存品項超額分配" -#: build/models.py:2047 build/serializers.py:881 build/serializers.py:1186 -#: order/serializers.py:1669 order/serializers.py:1690 -#: order/serializers.py:2764 order/serializers.py:2785 +#: build/models.py:2078 build/serializers.py:894 build/serializers.py:1199 +#: order/serializers.py:1659 order/serializers.py:1680 +#: order/serializers.py:2767 order/serializers.py:2788 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1462 stock/models.py:467 stock/serializers.py:103 #: stock/serializers.py:832 stock/serializers.py:1385 stock/serializers.py:1501 msgid "Stock Item" msgstr "庫存品項" -#: build/models.py:2048 +#: build/models.py:2079 msgid "Source stock item" msgstr "來源庫存項目" -#: build/models.py:2058 +#: build/models.py:2089 msgid "Stock quantity to allocate to build" msgstr "要分配的庫存數量" -#: build/models.py:2067 +#: build/models.py:2098 msgid "Install into" msgstr "安裝到" -#: build/models.py:2068 +#: build/models.py:2099 msgid "Destination stock item" msgstr "目的庫存品項" -#: build/serializers.py:122 +#: build/serializers.py:128 msgid "Build Level" msgstr "構建等級" -#: build/serializers.py:136 part/serializers.py:1314 +#: build/serializers.py:142 part/serializers.py:1281 msgid "Part Name" msgstr "零件名稱" -#: build/serializers.py:221 build/serializers.py:907 +#: build/serializers.py:244 build/serializers.py:920 msgid "Build Output" msgstr "產出" -#: build/serializers.py:233 +#: build/serializers.py:256 msgid "Build output does not match the parent build" msgstr "產出與之前的生產不匹配" -#: build/serializers.py:237 +#: build/serializers.py:260 msgid "Output part does not match BuildOrder part" msgstr "產出零件與生產訂單零件不匹配" -#: build/serializers.py:241 +#: build/serializers.py:264 msgid "This build output has already been completed" msgstr "此產出已經完成" -#: build/serializers.py:255 +#: build/serializers.py:278 msgid "This build output is not fully allocated" msgstr "此產出尚未完全分配" -#: build/serializers.py:274 build/serializers.py:323 +#: build/serializers.py:305 build/serializers.py:358 msgid "Enter quantity for build output" msgstr "輸入產出數量" -#: build/serializers.py:345 +#: build/serializers.py:380 msgid "Integer quantity required for trackable parts" msgstr "可追蹤的零件數量必須為整數" -#: build/serializers.py:351 +#: build/serializers.py:386 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" -#: build/serializers.py:368 order/serializers.py:918 order/serializers.py:1845 -#: order/serializers.py:2982 stock/serializers.py:731 +#: build/serializers.py:403 order/serializers.py:879 order/serializers.py:1835 +#: order/serializers.py:2985 stock/serializers.py:731 msgid "Serial Numbers" msgstr "序號" -#: build/serializers.py:369 +#: build/serializers.py:404 msgid "Enter serial numbers for build outputs" msgstr "輸出產出的序列號" -#: build/serializers.py:375 +#: build/serializers.py:410 msgid "Stock location for build output" msgstr "生產輸出的庫存地點" -#: build/serializers.py:390 +#: build/serializers.py:425 msgid "Auto Allocate Serial Numbers" msgstr "自動分配序號" -#: build/serializers.py:392 +#: build/serializers.py:427 msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:425 order/serializers.py:1004 stock/api.py:1230 +#: build/serializers.py:460 order/serializers.py:965 stock/api.py:1230 #: stock/models.py:2013 msgid "The following serial numbers already exist or are invalid" msgstr "序號已存在或無效" -#: build/serializers.py:467 build/serializers.py:511 build/serializers.py:582 +#: build/serializers.py:502 build/serializers.py:546 build/serializers.py:595 msgid "A list of build outputs must be provided" msgstr "必須提供產出清單" -#: build/serializers.py:488 +#: build/serializers.py:523 msgid "Stock location for scrapped outputs" msgstr "廢品產出的庫存位置" -#: build/serializers.py:494 +#: build/serializers.py:529 msgid "Discard Allocations" msgstr "放棄分配" -#: build/serializers.py:495 +#: build/serializers.py:530 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消對廢品產出的任何庫存分配" -#: build/serializers.py:500 +#: build/serializers.py:535 msgid "Reason for scrapping build output(s)" msgstr "廢品產出的原因" -#: build/serializers.py:537 +#: build/serializers.py:574 msgid "Location for completed build outputs" msgstr "已完成刪除的庫存地點" -#: build/serializers.py:545 order/serializers.py:2575 +#: build/serializers.py:582 order/serializers.py:2578 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:546 +#: build/serializers.py:583 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果庫存尚未全部分配,則完成產出" -#: build/serializers.py:635 +#: build/serializers.py:648 msgid "Consume Allocated Stock" msgstr "消費已分配的庫存" -#: build/serializers.py:636 +#: build/serializers.py:649 msgid "Consume any stock which has already been allocated to this build" msgstr "消耗已分配給此生產的任何庫存" -#: build/serializers.py:642 +#: build/serializers.py:655 msgid "Remove Incomplete Outputs" msgstr "移除未完成的產出" -#: build/serializers.py:643 +#: build/serializers.py:656 msgid "Delete any build outputs which have not been completed" msgstr "刪除所有未完成的產出" -#: build/serializers.py:670 +#: build/serializers.py:683 msgid "Not permitted" msgstr "不允許" -#: build/serializers.py:671 +#: build/serializers.py:684 msgid "Accept as consumed by this build order" msgstr "接受作為此生產訂單的消費" -#: build/serializers.py:672 +#: build/serializers.py:685 msgid "Deallocate before completing this build order" msgstr "完成此生產訂單前取消分配" -#: build/serializers.py:699 +#: build/serializers.py:712 msgid "Overallocated Stock" msgstr "超出分配的庫存" -#: build/serializers.py:702 +#: build/serializers.py:715 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何處理分配給生產訂單的額外庫存項" -#: build/serializers.py:713 +#: build/serializers.py:726 msgid "Some stock items have been overallocated" msgstr "有庫存項目已被過度分配" -#: build/serializers.py:718 +#: build/serializers.py:731 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:720 +#: build/serializers.py:733 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受庫存項未被完全分配至生產訂單" -#: build/serializers.py:731 +#: build/serializers.py:744 msgid "Required stock has not been fully allocated" msgstr "所需庫存尚未完全分配" -#: build/serializers.py:736 order/serializers.py:548 order/serializers.py:1746 +#: build/serializers.py:749 order/serializers.py:509 order/serializers.py:1736 msgid "Accept Incomplete" msgstr "接受不完整" -#: build/serializers.py:738 +#: build/serializers.py:751 msgid "Accept that the required number of build outputs have not been completed" msgstr "允許所需數量的產出未完成" -#: build/serializers.py:749 +#: build/serializers.py:762 msgid "Required build quantity has not been completed" msgstr "未完成所需生產數量" -#: build/serializers.py:761 +#: build/serializers.py:774 msgid "Build order has open child build orders" msgstr "生產訂單有打開的子生產訂單" -#: build/serializers.py:764 +#: build/serializers.py:777 msgid "Build order must be in production state" msgstr "生產訂單必須處於生產狀態" -#: build/serializers.py:767 +#: build/serializers.py:780 msgid "Build order has incomplete outputs" msgstr "生產訂單有未完成的產出" -#: build/serializers.py:806 +#: build/serializers.py:819 msgid "Build Line" msgstr "生產行" -#: build/serializers.py:814 +#: build/serializers.py:827 msgid "Build output" msgstr "產出" -#: build/serializers.py:822 +#: build/serializers.py:835 msgid "Build output must point to the same build" msgstr "生產產出必須指向相同的生產" -#: build/serializers.py:853 +#: build/serializers.py:866 msgid "Build Line Item" msgstr "生產行項目" -#: build/serializers.py:871 +#: build/serializers.py:884 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必須與生產訂單零件相同" -#: build/serializers.py:887 stock/serializers.py:1398 +#: build/serializers.py:900 stock/serializers.py:1398 msgid "Item must be in stock" msgstr "商品必須有庫存" -#: build/serializers.py:930 order/serializers.py:1732 order/serializers.py:2818 +#: build/serializers.py:943 order/serializers.py:1722 order/serializers.py:2821 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:936 +#: build/serializers.py:949 msgid "Build output must be specified for allocation of tracked parts" msgstr "對於被追蹤的零件的分配,必須指定生產產出" -#: build/serializers.py:944 +#: build/serializers.py:957 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "對於未被追蹤的零件,無法指定生產產出" -#: build/serializers.py:968 order/serializers.py:2015 order/serializers.py:2843 +#: build/serializers.py:981 order/serializers.py:2005 order/serializers.py:2846 msgid "Allocation items must be provided" msgstr "必須提供分配項目" -#: build/serializers.py:1032 +#: build/serializers.py:1045 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件來源的庫存地點(留空則可來源於任何庫存地點)" -#: build/serializers.py:1041 order/serializers.py:2072 +#: build/serializers.py:1054 order/serializers.py:2062 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1042 +#: build/serializers.py:1055 msgid "Exclude stock items from this selected location" msgstr "從該選定的庫存地點排除庫存項" -#: build/serializers.py:1047 order/serializers.py:2087 +#: build/serializers.py:1060 order/serializers.py:2077 msgid "Interchangeable Stock" msgstr "可互換庫存" -#: build/serializers.py:1048 +#: build/serializers.py:1061 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多個位置的庫存項目可以互換使用" -#: build/serializers.py:1053 +#: build/serializers.py:1066 msgid "Substitute Stock" msgstr "替代品庫存" -#: build/serializers.py:1054 +#: build/serializers.py:1067 msgid "Allow allocation of substitute parts" msgstr "允許分配可替換的零件" -#: build/serializers.py:1059 +#: build/serializers.py:1072 msgid "Optional Items" msgstr "可選項目" -#: build/serializers.py:1060 +#: build/serializers.py:1073 msgid "Allocate optional BOM items to build order" msgstr "分配可選的物料清單給生產訂單" -#: build/serializers.py:1066 +#: build/serializers.py:1079 msgid "All Items" msgstr "全部品項" -#: build/serializers.py:1067 +#: build/serializers.py:1080 msgid "Untracked Items" msgstr "未追蹤項目" -#: build/serializers.py:1068 +#: build/serializers.py:1081 msgid "Tracked Items" msgstr "已追蹤項目" -#: build/serializers.py:1070 +#: build/serializers.py:1083 msgid "Item Type" msgstr "品項類型" -#: build/serializers.py:1071 +#: build/serializers.py:1084 msgid "Select item type to auto-allocate" msgstr "選擇要自動分配的項目類型" -#: build/serializers.py:1077 order/serializers.py:2096 +#: build/serializers.py:1090 order/serializers.py:2086 msgid "Stock Priority" msgstr "" -#: build/serializers.py:1078 order/serializers.py:2097 +#: build/serializers.py:1091 order/serializers.py:2087 msgid "Preferred order in which matching stock items are consumed" msgstr "" -#: build/serializers.py:1086 +#: build/serializers.py:1099 msgid "Build Lines" msgstr "" -#: build/serializers.py:1088 +#: build/serializers.py:1101 msgid "Limit allocation to these build lines (leave blank to allocate all lines)" msgstr "" -#: build/serializers.py:1143 +#: build/serializers.py:1156 msgid "BOM Reference" msgstr "物料清單參考" -#: build/serializers.py:1149 +#: build/serializers.py:1162 msgid "BOM Part ID" msgstr "物料清單零件識別號碼" -#: build/serializers.py:1156 +#: build/serializers.py:1169 msgid "BOM Part Name" msgstr "物料清單零件名稱" -#: build/serializers.py:1208 +#: build/serializers.py:1221 msgid "Install Into" msgstr "安裝至" -#: build/serializers.py:1237 build/serializers.py:1466 +#: build/serializers.py:1250 build/serializers.py:1479 msgid "Build" msgstr "生產" -#: build/serializers.py:1257 company/models.py:637 order/api.py:328 -#: order/api.py:333 order/api.py:560 order/serializers.py:664 +#: build/serializers.py:1270 company/models.py:637 order/api.py:328 +#: order/api.py:333 order/api.py:560 order/serializers.py:625 #: stock/models.py:1088 stock/serializers.py:589 msgid "Supplier Part" msgstr "供應商零件" -#: build/serializers.py:1273 stock/serializers.py:652 +#: build/serializers.py:1286 stock/serializers.py:652 msgid "Allocated Quantity" msgstr "已分配數量" -#: build/serializers.py:1340 +#: build/serializers.py:1353 msgid "Build Reference" msgstr "構建參考" -#: build/serializers.py:1350 +#: build/serializers.py:1363 msgid "Part Category Name" msgstr "零件類別名稱" -#: build/serializers.py:1388 common/setting/system.py:500 part/models.py:1273 +#: build/serializers.py:1401 common/setting/system.py:500 part/models.py:1274 msgid "Trackable" msgstr "可追蹤" -#: build/serializers.py:1391 +#: build/serializers.py:1404 msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1394 part/models.py:4208 +#: build/serializers.py:1407 part/models.py:4212 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1400 build/serializers.py:1406 part/models.py:3862 -#: part/models.py:4512 stock/api.py:906 +#: build/serializers.py:1413 build/serializers.py:1419 part/models.py:3866 +#: part/models.py:4522 stock/api.py:906 msgid "BOM Item" msgstr "物料清單項" -#: build/serializers.py:1484 order/serializers.py:1389 -#: order/serializers.py:2742 part/serializers.py:1232 part/serializers.py:1815 +#: build/serializers.py:1497 order/serializers.py:1357 +#: order/serializers.py:2745 part/serializers.py:1199 part/serializers.py:1782 msgid "In Production" msgstr "生產中" -#: build/serializers.py:1486 part/serializers.py:891 part/serializers.py:1236 +#: build/serializers.py:1499 part/serializers.py:832 part/serializers.py:1203 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1489 part/serializers.py:924 +#: build/serializers.py:1502 part/serializers.py:865 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1490 part/serializers.py:1222 part/serializers.py:1878 +#: build/serializers.py:1503 part/serializers.py:1189 part/serializers.py:1845 msgid "Available Stock" msgstr "可用庫存" -#: build/serializers.py:1492 +#: build/serializers.py:1505 msgid "Available Substitute Stock" msgstr "可用的替代品庫存" -#: build/serializers.py:1495 +#: build/serializers.py:1508 msgid "Available Variant Stock" msgstr "可用的變體庫存" -#: build/serializers.py:1708 +#: build/serializers.py:1721 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗數量超過已分配數量" -#: build/serializers.py:1745 +#: build/serializers.py:1758 msgid "Optional notes for the stock consumption" msgstr "庫存耗用的可選備註" -#: build/serializers.py:1762 +#: build/serializers.py:1775 msgid "Build item must point to the correct build order" msgstr "生產項必須指向正確的生產工單" -#: build/serializers.py:1767 +#: build/serializers.py:1780 msgid "Duplicate build item allocation" msgstr "重複的生產項分配" -#: build/serializers.py:1785 +#: build/serializers.py:1798 msgid "Build line must point to the correct build order" msgstr "生產行必須指向正確的生產工單" -#: build/serializers.py:1790 +#: build/serializers.py:1803 msgid "Duplicate build line allocation" msgstr "重複的生產行分配" -#: build/serializers.py:1802 +#: build/serializers.py:1815 msgid "At least one item or line must be provided" msgstr "至少必須提供一個項目或一行" @@ -1584,7 +1620,7 @@ msgstr "" msgid "Project Code Label" msgstr "項目編碼標籤" -#: common/models.py:108 common/models.py:133 common/models.py:3396 +#: common/models.py:108 common/models.py:133 common/models.py:3402 msgid "Updated" msgstr "已是最新" @@ -1608,9 +1644,9 @@ msgstr "唯一項目編碼" msgid "Project description" msgstr "項目描述" -#: common/models.py:186 common/models.py:1454 common/models.py:2454 -#: common/models.py:2589 company/models.py:194 company/models.py:783 -#: machine/models.py:40 part/models.py:1296 plugin/models.py:69 +#: common/models.py:186 common/models.py:1460 common/models.py:2460 +#: common/models.py:2595 company/models.py:194 company/models.py:783 +#: machine/models.py:43 part/models.py:1297 plugin/models.py:69 #: stock/api.py:662 users/models.py:191 users/models.py:550 #: users/serializers.py:339 users/serializers.py:431 msgid "Active" @@ -1656,10 +1692,10 @@ msgstr "值未通過驗證檢查" msgid "Key string must be unique" msgstr "鍵字符串必須是唯一的" -#: common/models.py:1357 common/models.py:1358 common/models.py:1462 -#: common/models.py:1463 common/models.py:1708 common/models.py:1709 -#: common/models.py:2146 common/models.py:2147 common/models.py:3044 -#: importer/models.py:102 part/models.py:3637 part/models.py:3665 +#: common/models.py:1357 common/models.py:1358 common/models.py:1468 +#: common/models.py:1469 common/models.py:1714 common/models.py:1715 +#: common/models.py:2152 common/models.py:2153 common/models.py:3050 +#: importer/models.py:102 part/models.py:3641 part/models.py:3669 #: plugin/models.py:392 plugin/models.py:393 #: report/templates/report/inventree_test_report.html:105 users/models.py:122 #: users/models.py:497 @@ -1670,7 +1706,7 @@ msgstr "使用者" msgid "Price break quantity" msgstr "批發價數量" -#: common/models.py:1387 company/serializers.py:304 order/models.py:2101 +#: common/models.py:1387 company/serializers.py:348 order/models.py:2101 #: order/models.py:3327 msgid "Price" msgstr "價格" @@ -1679,560 +1715,560 @@ msgstr "價格" msgid "Unit price at specified quantity" msgstr "指定數量的單位價格" -#: common/models.py:1439 common/models.py:1624 +#: common/models.py:1445 common/models.py:1630 msgid "Endpoint" msgstr "端點" -#: common/models.py:1440 +#: common/models.py:1446 msgid "Endpoint at which this webhook is received" msgstr "接收此網絡鈎子的端點" -#: common/models.py:1450 +#: common/models.py:1456 msgid "Name for this webhook" msgstr "此網絡鈎子的名稱" -#: common/models.py:1454 +#: common/models.py:1460 msgid "Is this webhook active" msgstr "網絡鈎子是否已啓用" -#: common/models.py:1470 users/models.py:170 +#: common/models.py:1476 users/models.py:170 msgid "Token" msgstr "令牌" -#: common/models.py:1471 +#: common/models.py:1477 msgid "Token for access" msgstr "訪問令牌" -#: common/models.py:1479 +#: common/models.py:1485 msgid "Secret" msgstr "密鑰" -#: common/models.py:1480 +#: common/models.py:1486 msgid "Shared secret for HMAC" msgstr "HMAC共享密鑰" -#: common/models.py:1588 common/models.py:3281 +#: common/models.py:1594 common/models.py:3287 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1589 common/models.py:3271 +#: common/models.py:1595 common/models.py:3277 msgid "Unique identifier for this message" msgstr "此郵件的唯一標識符" -#: common/models.py:1597 +#: common/models.py:1603 msgid "Host" msgstr "主機" -#: common/models.py:1598 +#: common/models.py:1604 msgid "Host from which this message was received" msgstr "接收此消息的主機" -#: common/models.py:1606 +#: common/models.py:1612 msgid "Header" msgstr "標題" -#: common/models.py:1607 +#: common/models.py:1613 msgid "Header of this message" msgstr "此消息的標題" -#: common/models.py:1614 +#: common/models.py:1620 msgid "Body" msgstr "正文" -#: common/models.py:1615 +#: common/models.py:1621 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1625 +#: common/models.py:1631 msgid "Endpoint on which this message was received" msgstr "接收此消息的終點" -#: common/models.py:1630 +#: common/models.py:1636 msgid "Worked on" msgstr "工作於" -#: common/models.py:1631 +#: common/models.py:1637 msgid "Was the work on this message finished?" msgstr "這條消息的工作完成了嗎?" -#: common/models.py:1757 +#: common/models.py:1763 msgid "Id" msgstr "標識" -#: common/models.py:1759 +#: common/models.py:1765 msgid "Title" msgstr "標題" -#: common/models.py:1761 common/models.py:2129 company/models.py:188 +#: common/models.py:1767 common/models.py:2135 company/models.py:188 #: company/models.py:479 company/models.py:550 company/models.py:806 #: order/models.py:502 order/models.py:2045 order/models.py:2621 -#: part/models.py:1180 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "連結" -#: common/models.py:1763 +#: common/models.py:1769 msgid "Published" msgstr "已發佈" -#: common/models.py:1765 +#: common/models.py:1771 msgid "Author" msgstr "作者" -#: common/models.py:1767 +#: common/models.py:1773 msgid "Summary" msgstr "摘要" -#: common/models.py:1770 common/models.py:3248 +#: common/models.py:1776 common/models.py:3254 msgid "Read" msgstr "閲讀" -#: common/models.py:1770 +#: common/models.py:1776 msgid "Was this news item read?" msgstr "這條新聞被閲讀了嗎?" -#: common/models.py:1787 +#: common/models.py:1793 msgid "Image file" msgstr "圖像文件" -#: common/models.py:1799 +#: common/models.py:1805 msgid "Target model type for this image" msgstr "此圖像的目標模型類型" -#: common/models.py:1803 +#: common/models.py:1809 msgid "Target model ID for this image" msgstr "此圖像的目標型號ID" -#: common/models.py:1825 +#: common/models.py:1831 msgid "Custom Unit" msgstr "自定義單位" -#: common/models.py:1843 +#: common/models.py:1849 msgid "Unit symbol must be unique" msgstr "單位符號必須唯一" -#: common/models.py:1858 +#: common/models.py:1864 msgid "Unit name must be a valid identifier" msgstr "單位名稱必須是有效的標識符" -#: common/models.py:1877 +#: common/models.py:1883 msgid "Unit name" msgstr "單位名稱" -#: common/models.py:1884 +#: common/models.py:1890 msgid "Symbol" msgstr "符號" -#: common/models.py:1885 +#: common/models.py:1891 msgid "Optional unit symbol" msgstr "可選單位符號" -#: common/models.py:1891 +#: common/models.py:1897 msgid "Definition" msgstr "定義" -#: common/models.py:1892 +#: common/models.py:1898 msgid "Unit definition" msgstr "單位定義" -#: common/models.py:1960 common/models.py:2112 stock/models.py:3238 +#: common/models.py:1966 common/models.py:2118 stock/models.py:3238 #: stock/serializers.py:259 msgid "Attachment" msgstr "附件" -#: common/models.py:2006 +#: common/models.py:2012 msgid "Missing file" msgstr "缺少檔案" -#: common/models.py:2007 +#: common/models.py:2013 msgid "Missing external link" msgstr "缺少外部連結" -#: common/models.py:2052 +#: common/models.py:2058 msgid "No file attached to rename" msgstr "" -#: common/models.py:2055 +#: common/models.py:2061 msgid "Filename cannot be empty" msgstr "" -#: common/models.py:2060 common/models.py:2080 +#: common/models.py:2066 common/models.py:2086 msgid "Invalid filename" msgstr "" -#: common/models.py:2066 +#: common/models.py:2072 msgid "Cannot change file extension" msgstr "" -#: common/models.py:2085 +#: common/models.py:2091 msgid "A file with this name already exists" msgstr "" -#: common/models.py:2092 +#: common/models.py:2098 msgid "Failed to save renamed file" msgstr "" -#: common/models.py:2104 common/models.py:2725 +#: common/models.py:2110 common/models.py:2731 msgid "Model type" msgstr "模型類型" -#: common/models.py:2105 +#: common/models.py:2111 msgid "Target model type for image" msgstr "圖像的目標模型類型" -#: common/models.py:2114 +#: common/models.py:2120 msgid "Select file to attach" msgstr "選擇附件" -#: common/models.py:2120 +#: common/models.py:2126 msgid "Thumbnail" msgstr "" -#: common/models.py:2121 +#: common/models.py:2127 msgid "Thumbnail image for this attachment" msgstr "" -#: common/models.py:2137 +#: common/models.py:2143 msgid "Comment" msgstr "註解" -#: common/models.py:2138 +#: common/models.py:2144 msgid "Attachment comment" msgstr "附件評論" -#: common/models.py:2154 +#: common/models.py:2160 msgid "Upload date" msgstr "上傳日期" -#: common/models.py:2155 +#: common/models.py:2161 msgid "Date the file was uploaded" msgstr "上傳文件的日期" -#: common/models.py:2160 +#: common/models.py:2166 msgid "Is image" msgstr "" -#: common/models.py:2161 +#: common/models.py:2167 msgid "True if this attachment is a valid image file" msgstr "" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size" msgstr "文件大小" -#: common/models.py:2165 +#: common/models.py:2171 msgid "File size in bytes" msgstr "文件大小,以字節為單位" -#: common/models.py:2201 common/serializers.py:841 +#: common/models.py:2207 common/serializers.py:841 msgid "Invalid model type specified for attachment" msgstr "為附件指定的模型類型無效" -#: common/models.py:2285 +#: common/models.py:2291 msgid "Custom State" msgstr "自定狀態" -#: common/models.py:2286 +#: common/models.py:2292 msgid "Custom States" msgstr "定製狀態" -#: common/models.py:2291 +#: common/models.py:2297 msgid "Reference Status Set" msgstr "參考狀態設定" -#: common/models.py:2292 +#: common/models.py:2298 msgid "Status set that is extended with this custom state" msgstr "使用此自定義狀態擴展狀態的狀態集" -#: common/models.py:2296 generic/states/serializers.py:18 +#: common/models.py:2302 generic/states/serializers.py:18 msgid "Logical Key" msgstr "邏輯密鑰" -#: common/models.py:2298 +#: common/models.py:2304 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同於商業邏輯中自定義狀態的狀態邏輯鍵" -#: common/models.py:2303 common/models.py:2570 machine/serializers.py:27 +#: common/models.py:2309 common/models.py:2576 machine/serializers.py:27 #: report/templates/report/inventree_test_report.html:104 stock/models.py:3230 msgid "Value" msgstr "值" -#: common/models.py:2304 +#: common/models.py:2310 msgid "Numerical value that will be saved in the models database" msgstr "將儲存於模型資料庫中的數值" -#: common/models.py:2310 +#: common/models.py:2316 msgid "Name of the state" msgstr "狀態名" -#: common/models.py:2319 common/models.py:2576 generic/states/serializers.py:22 +#: common/models.py:2325 common/models.py:2582 generic/states/serializers.py:22 msgid "Label" msgstr "標籤" -#: common/models.py:2320 +#: common/models.py:2326 msgid "Label that will be displayed in the frontend" msgstr "在前端顯示的標籤" -#: common/models.py:2327 generic/states/serializers.py:24 +#: common/models.py:2333 generic/states/serializers.py:24 msgid "Color" msgstr "顏色" -#: common/models.py:2328 +#: common/models.py:2334 msgid "Color that will be displayed in the frontend" msgstr "將在前端顯示顏色" -#: common/models.py:2336 +#: common/models.py:2342 msgid "Model" msgstr "模式" -#: common/models.py:2337 +#: common/models.py:2343 msgid "Model this state is associated with" msgstr "該狀態關聯的模型" -#: common/models.py:2352 +#: common/models.py:2358 msgid "Model must be selected" msgstr "必須選定模型" -#: common/models.py:2355 +#: common/models.py:2361 msgid "Key must be selected" msgstr "必須選取密鑰" -#: common/models.py:2358 +#: common/models.py:2364 msgid "Logical key must be selected" msgstr "必須選中邏輯密鑰" -#: common/models.py:2362 +#: common/models.py:2368 msgid "Key must be different from logical key" msgstr "密鑰必須不同於邏輯密鑰" -#: common/models.py:2369 +#: common/models.py:2375 msgid "Valid reference status class must be provided" msgstr "必須提供有效參考狀態類別" -#: common/models.py:2375 +#: common/models.py:2381 msgid "Key must be different from the logical keys of the reference status" msgstr "密鑰必須不同於參考狀態的邏輯密鑰" -#: common/models.py:2382 +#: common/models.py:2388 msgid "Logical key must be in the logical keys of the reference status" msgstr "邏輯密鑰必須在參考狀態的邏輯鍵中" -#: common/models.py:2389 +#: common/models.py:2395 msgid "Name must be different from the names of the reference status" msgstr "名稱必須不同於參考狀態的名稱" -#: common/models.py:2429 common/models.py:2564 common/models.py:2770 +#: common/models.py:2435 common/models.py:2570 common/models.py:2776 msgid "Selection List" msgstr "選擇列表" -#: common/models.py:2430 +#: common/models.py:2436 msgid "Selection Lists" msgstr "選擇列表" -#: common/models.py:2435 +#: common/models.py:2441 msgid "Name of the selection list" msgstr "選擇列表名稱" -#: common/models.py:2442 +#: common/models.py:2448 msgid "Description of the selection list" msgstr "選擇列表描述" -#: common/models.py:2448 part/models.py:1301 +#: common/models.py:2454 part/models.py:1302 msgid "Locked" msgstr "已鎖定" -#: common/models.py:2449 +#: common/models.py:2455 msgid "Is this selection list locked?" msgstr "此選擇列表是否已鎖定?" -#: common/models.py:2455 +#: common/models.py:2461 msgid "Can this selection list be used?" msgstr "此選擇列表是否可使用?" -#: common/models.py:2463 +#: common/models.py:2469 msgid "Source Plugin" msgstr "來源模組" -#: common/models.py:2464 +#: common/models.py:2470 msgid "Plugin which provides the selection list" msgstr "提供此選擇列表的模組" -#: common/models.py:2469 +#: common/models.py:2475 msgid "Source String" msgstr "來源字串" -#: common/models.py:2470 +#: common/models.py:2476 msgid "Optional string identifying the source used for this list" msgstr "用於標示此列表來源的可選字串" -#: common/models.py:2479 +#: common/models.py:2485 msgid "Default Entry" msgstr "預設項目" -#: common/models.py:2480 +#: common/models.py:2486 msgid "Default entry for this selection list" msgstr "此選擇列表的預設項目" -#: common/models.py:2485 common/models.py:3391 +#: common/models.py:2491 common/models.py:3397 msgid "Created" msgstr "已創建" -#: common/models.py:2486 +#: common/models.py:2492 msgid "Date and time that the selection list was created" msgstr "選擇列表建立的日期與時間" -#: common/models.py:2491 +#: common/models.py:2497 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2492 +#: common/models.py:2498 msgid "Date and time that the selection list was last updated" msgstr "選擇列表最近更新的日期與時間" -#: common/models.py:2554 +#: common/models.py:2560 msgid "Selection List Entry" msgstr "選擇列表項目" -#: common/models.py:2555 +#: common/models.py:2561 msgid "Selection List Entries" msgstr "選擇列表項目" -#: common/models.py:2565 +#: common/models.py:2571 msgid "Selection list to which this entry belongs" msgstr "該項目所屬的選擇列表" -#: common/models.py:2571 +#: common/models.py:2577 msgid "Value of the selection list entry" msgstr "選擇列表項目的值" -#: common/models.py:2577 +#: common/models.py:2583 msgid "Label for the selection list entry" msgstr "選擇列表項目的標籤" -#: common/models.py:2583 +#: common/models.py:2589 msgid "Description of the selection list entry" msgstr "選擇列表項目的描述" -#: common/models.py:2590 +#: common/models.py:2596 msgid "Is this selection list entry active?" msgstr "此選擇列表項目是否啟用?" -#: common/models.py:2624 +#: common/models.py:2630 msgid "Parameter Template" msgstr "參數模板" -#: common/models.py:2625 +#: common/models.py:2631 msgid "Parameter Templates" msgstr "參數範本" -#: common/models.py:2662 +#: common/models.py:2668 msgid "Checkbox parameters cannot have units" msgstr "勾選框參數不能有單位" -#: common/models.py:2667 +#: common/models.py:2673 msgid "Checkbox parameters cannot have choices" msgstr "複選框參數不能有選項" -#: common/models.py:2687 part/models.py:3735 +#: common/models.py:2693 part/models.py:3739 msgid "Choices must be unique" msgstr "選擇必須是唯一的" -#: common/models.py:2704 +#: common/models.py:2710 msgid "Parameter template name must be unique" msgstr "參數模板名稱必須是唯一的" -#: common/models.py:2726 +#: common/models.py:2732 msgid "Target model type for this parameter template" msgstr "此參數範本的目標模型類型" -#: common/models.py:2732 +#: common/models.py:2738 msgid "Parameter Name" msgstr "參數名稱" -#: common/models.py:2738 part/models.py:1254 +#: common/models.py:2744 part/models.py:1255 msgid "Units" msgstr "單位" -#: common/models.py:2739 +#: common/models.py:2745 msgid "Physical units for this parameter" msgstr "此參數的物理單位" -#: common/models.py:2747 +#: common/models.py:2753 msgid "Parameter description" msgstr "參數説明" -#: common/models.py:2753 +#: common/models.py:2759 msgid "Checkbox" msgstr "勾選框" -#: common/models.py:2754 +#: common/models.py:2760 msgid "Is this parameter a checkbox?" msgstr "此參數是否為勾選框?" -#: common/models.py:2759 part/models.py:3822 +#: common/models.py:2765 part/models.py:3826 msgid "Choices" msgstr "選項" -#: common/models.py:2760 +#: common/models.py:2766 msgid "Valid choices for this parameter (comma-separated)" msgstr "此參數的有效選擇 (逗號分隔)" -#: common/models.py:2771 +#: common/models.py:2777 msgid "Selection list for this parameter" msgstr "此參數的選擇清單" -#: common/models.py:2776 part/models.py:3797 report/models.py:297 +#: common/models.py:2782 part/models.py:3801 report/models.py:297 msgid "Enabled" msgstr "已啓用" -#: common/models.py:2777 +#: common/models.py:2783 msgid "Is this parameter template enabled?" msgstr "是否啟用此參數範本?" -#: common/models.py:2818 +#: common/models.py:2824 msgid "Parameter" msgstr "參數" -#: common/models.py:2819 +#: common/models.py:2825 msgid "Parameters" msgstr "參數集" -#: common/models.py:2865 +#: common/models.py:2871 msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2939 common/serializers.py:937 +#: common/models.py:2945 common/serializers.py:937 msgid "Invalid model type specified for parameter" msgstr "為參數指定的模型類型無效" -#: common/models.py:2975 +#: common/models.py:2981 msgid "Model ID" msgstr "模型 ID" -#: common/models.py:2976 +#: common/models.py:2982 msgid "ID of the target model for this parameter" msgstr "此參數的目標模型 ID" -#: common/models.py:2985 common/setting/system.py:470 report/models.py:383 +#: common/models.py:2991 common/setting/system.py:470 report/models.py:383 #: report/models.py:717 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:246 msgid "Template" msgstr "模板" -#: common/models.py:2986 +#: common/models.py:2992 msgid "Parameter template" msgstr "參數範本" -#: common/models.py:2991 common/models.py:3033 importer/models.py:664 +#: common/models.py:2997 common/models.py:3039 importer/models.py:664 msgid "Data" msgstr "數據" -#: common/models.py:2992 +#: common/models.py:2998 msgid "Parameter Value" msgstr "參數值" -#: common/models.py:3001 company/models.py:823 order/serializers.py:936 -#: order/serializers.py:2319 part/models.py:4183 part/models.py:4552 +#: common/models.py:3007 company/models.py:823 order/serializers.py:897 +#: order/serializers.py:2317 part/models.py:4187 part/models.py:4562 #: 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 @@ -2243,181 +2279,181 @@ msgstr "參數值" msgid "Note" msgstr "備註" -#: common/models.py:3002 stock/serializers.py:750 +#: common/models.py:3008 stock/serializers.py:750 msgid "Optional note field" msgstr "可選註釋字段" -#: common/models.py:3029 +#: common/models.py:3035 msgid "Barcode Scan" msgstr "掃描條碼" -#: common/models.py:3034 +#: common/models.py:3040 msgid "Barcode data" msgstr "條碼數據" -#: common/models.py:3045 +#: common/models.py:3051 msgid "User who scanned the barcode" msgstr "掃描條碼" -#: common/models.py:3050 importer/models.py:71 +#: common/models.py:3056 importer/models.py:71 msgid "Timestamp" msgstr "時間戳" -#: common/models.py:3051 +#: common/models.py:3057 msgid "Date and time of the barcode scan" msgstr "掃描條碼的日期和時間" -#: common/models.py:3057 +#: common/models.py:3063 msgid "URL endpoint which processed the barcode" msgstr "處理條碼的 URL 終點" -#: common/models.py:3064 order/models.py:2091 plugin/serializers.py:93 +#: common/models.py:3070 order/models.py:2091 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:3065 +#: common/models.py:3071 msgid "Context data for the barcode scan" msgstr "掃描條碼的上下文數據" -#: common/models.py:3072 +#: common/models.py:3078 msgid "Response" msgstr "響應" -#: common/models.py:3073 +#: common/models.py:3079 msgid "Response data from the barcode scan" msgstr "掃描條碼的響應數據" -#: common/models.py:3079 report/templates/report/inventree_test_report.html:103 +#: common/models.py:3085 report/templates/report/inventree_test_report.html:103 #: stock/models.py:3224 msgid "Result" msgstr "結果" -#: common/models.py:3080 +#: common/models.py:3086 msgid "Was the barcode scan successful?" msgstr "條碼掃描成功嗎?" -#: common/models.py:3162 +#: common/models.py:3168 msgid "An error occurred" msgstr "發生錯誤" -#: common/models.py:3183 +#: common/models.py:3189 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:已保護電子郵件日誌刪除。請將 INVENTREE_PROTECT_EMAIL_LOG 設為 False 以允許刪除。" -#: common/models.py:3230 +#: common/models.py:3236 msgid "Email Message" msgstr "電子郵件訊息" -#: common/models.py:3231 +#: common/models.py:3237 msgid "Email Messages" msgstr "電子郵件訊息" -#: common/models.py:3238 +#: common/models.py:3244 msgid "Announced" msgstr "已公告" -#: common/models.py:3240 +#: common/models.py:3246 msgid "Sent" msgstr "已發送" -#: common/models.py:3241 +#: common/models.py:3247 msgid "Failed" msgstr "失敗" -#: common/models.py:3244 +#: common/models.py:3250 msgid "Delivered" msgstr "已送達" -#: common/models.py:3252 +#: common/models.py:3258 msgid "Confirmed" msgstr "已確認" -#: common/models.py:3258 +#: common/models.py:3264 msgid "Inbound" msgstr "入站" -#: common/models.py:3259 +#: common/models.py:3265 msgid "Outbound" msgstr "出站" -#: common/models.py:3264 +#: common/models.py:3270 msgid "No Reply" msgstr "不回覆" -#: common/models.py:3265 +#: common/models.py:3271 msgid "Track Delivery" msgstr "追蹤投遞" -#: common/models.py:3266 +#: common/models.py:3272 msgid "Track Read" msgstr "追蹤已讀" -#: common/models.py:3267 +#: common/models.py:3273 msgid "Track Click" msgstr "追蹤點擊" -#: common/models.py:3270 common/models.py:3378 +#: common/models.py:3276 common/models.py:3384 msgid "Global ID" msgstr "全域 ID" -#: common/models.py:3283 +#: common/models.py:3289 msgid "Identifier for this message (might be supplied by external system)" msgstr "此訊息的識別碼(可能由外部系統提供)" -#: common/models.py:3290 +#: common/models.py:3296 msgid "Thread ID" msgstr "討論串 ID" -#: common/models.py:3292 +#: common/models.py:3298 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此訊息討論串的識別碼(可能由外部系統提供)" -#: common/models.py:3301 +#: common/models.py:3307 msgid "Thread" msgstr "討論串" -#: common/models.py:3302 +#: common/models.py:3308 msgid "Linked thread for this message" msgstr "此訊息所連結的討論串" -#: common/models.py:3318 +#: common/models.py:3324 msgid "Priority" msgstr "優先序" -#: common/models.py:3360 +#: common/models.py:3366 msgid "Email Thread" msgstr "電子郵件討論串" -#: common/models.py:3361 +#: common/models.py:3367 msgid "Email Threads" msgstr "電子郵件討論串" -#: common/models.py:3372 generic/states/serializers.py:16 +#: common/models.py:3378 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:111 msgid "Key" msgstr "鍵" -#: common/models.py:3375 +#: common/models.py:3381 msgid "Unique key for this thread (used to identify the thread)" msgstr "此討論串的唯一鍵(用於辨識)" -#: common/models.py:3379 +#: common/models.py:3385 msgid "Unique identifier for this thread" msgstr "此討論串的唯一識別碼" -#: common/models.py:3386 +#: common/models.py:3392 msgid "Started Internal" msgstr "內部建立" -#: common/models.py:3387 +#: common/models.py:3393 msgid "Was this thread started internally?" msgstr "此討論串是否為內部建立?" -#: common/models.py:3392 +#: common/models.py:3398 msgid "Date and time that the thread was created" msgstr "討論串建立的日期時間" -#: common/models.py:3397 +#: common/models.py:3403 msgid "Date and time that the thread was last updated" msgstr "討論串最後更新的日期時間" @@ -2923,8 +2959,8 @@ msgstr "零件默認為模板" msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:482 part/models.py:1267 part/serializers.py:1782 -#: part/serializers.py:1790 +#: common/setting/system.py:482 part/models.py:1268 part/serializers.py:1749 +#: part/serializers.py:1757 msgid "Component" msgstr "組件" @@ -2932,7 +2968,7 @@ msgstr "組件" msgid "Parts can be used as sub-components by default" msgstr "默認情況下,零件可用作子部件" -#: common/setting/system.py:488 part/models.py:1285 +#: common/setting/system.py:488 part/models.py:1286 msgid "Purchaseable" msgstr "可購買" @@ -2940,7 +2976,7 @@ msgstr "可購買" msgid "Parts are purchaseable by default" msgstr "默認情況下可購買零件" -#: common/setting/system.py:494 part/models.py:1291 stock/api.py:663 +#: common/setting/system.py:494 part/models.py:1292 stock/api.py:663 msgid "Salable" msgstr "可銷售" @@ -2952,7 +2988,7 @@ msgstr "零件默認為可銷售" msgid "Parts are trackable by default" msgstr "默認情況下可跟蹤零件" -#: common/setting/system.py:506 part/models.py:1307 +#: common/setting/system.py:506 part/models.py:1308 msgid "Virtual" msgstr "虛擬的" @@ -4215,8 +4251,8 @@ msgstr "內部零件已激活" msgid "Supplier is Active" msgstr "供應商已激活" -#: company/api.py:284 company/models.py:536 company/serializers.py:452 -#: part/serializers.py:525 +#: company/api.py:284 company/models.py:536 company/serializers.py:499 +#: part/serializers.py:465 msgid "Manufacturer" msgstr "製造商" @@ -4406,7 +4442,7 @@ msgstr "內部使用的裝運通知單" msgid "Link to address information (external)" msgstr "鏈接地址信息 (外部)" -#: company/models.py:508 company/models.py:799 company/serializers.py:480 +#: company/models.py:508 company/models.py:799 company/serializers.py:527 #: stock/api.py:581 msgid "Manufacturer Part" msgstr "製造商零件" @@ -4424,8 +4460,8 @@ msgstr "選擇零件" msgid "Select manufacturer" msgstr "選擇製造商" -#: company/models.py:543 company/serializers.py:491 order/serializers.py:783 -#: part/serializers.py:535 +#: company/models.py:543 company/serializers.py:538 order/serializers.py:744 +#: part/serializers.py:475 msgid "MPN" msgstr "製造商零件編號" @@ -4453,8 +4489,8 @@ msgstr "包裝單位必須大於零" msgid "Linked manufacturer part must reference the same base part" msgstr "鏈接的製造商零件必須引用相同的基礎零件" -#: company/models.py:771 company/serializers.py:439 company/serializers.py:474 -#: order/models.py:717 part/serializers.py:509 +#: company/models.py:771 company/serializers.py:486 company/serializers.py:521 +#: order/models.py:717 part/serializers.py:449 #: 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:587 templates/email/overdue_purchase_order.html:16 @@ -4465,7 +4501,7 @@ msgstr "供應商" msgid "Select supplier" msgstr "選擇供應商" -#: company/models.py:778 part/serializers.py:520 +#: company/models.py:778 part/serializers.py:460 msgid "Supplier stock keeping unit" msgstr "供應商庫存管理單位" @@ -4493,15 +4529,15 @@ msgstr "外部供應商零件鏈接的URL" msgid "Supplier part description" msgstr "供應商零件説明" -#: company/models.py:832 part/models.py:2359 +#: company/models.py:832 part/models.py:2366 msgid "base cost" msgstr "基本費用" -#: company/models.py:833 part/models.py:2360 +#: company/models.py:833 part/models.py:2367 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" -#: company/models.py:840 order/serializers.py:928 stock/models.py:1108 +#: company/models.py:840 order/serializers.py:889 stock/models.py:1108 #: stock/serializers.py:1721 msgid "Packaging" msgstr "打包" @@ -4518,7 +4554,7 @@ msgstr "包裝數量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "單包供應的總數量。為單個項目留空。" -#: company/models.py:867 part/models.py:2366 +#: company/models.py:867 part/models.py:2373 msgid "multiple" msgstr "多個" @@ -4542,31 +4578,31 @@ msgstr "上次更新可用性數據的日期" msgid "Supplier Price Break" msgstr "供應商批發價" -#: company/serializers.py:187 +#: company/serializers.py:192 msgid "Default currency used for this supplier" msgstr "此供應商使用的默認貨幣" -#: company/serializers.py:206 +#: company/serializers.py:228 msgid "Company Name" msgstr "公司名稱" -#: company/serializers.py:396 part/serializers.py:896 stock/serializers.py:449 +#: company/serializers.py:443 part/serializers.py:837 stock/serializers.py:449 msgid "In Stock" msgstr "有庫存" -#: company/serializers.py:414 +#: company/serializers.py:461 msgid "Price Breaks" msgstr "價格折扣" -#: company/serializers.py:467 +#: company/serializers.py:514 msgid "Pretty Name" msgstr "顯示名稱" -#: data_exporter/mixins.py:332 data_exporter/mixins.py:421 +#: data_exporter/mixins.py:341 data_exporter/mixins.py:430 msgid "Error occurred during data export" msgstr "資料匯出過程發生錯誤" -#: data_exporter/mixins.py:399 +#: data_exporter/mixins.py:408 msgid "Data export plugin returned incorrect data format" msgstr "資料匯出模組回傳的資料格式不正確" @@ -4735,11 +4771,11 @@ msgstr "行索引" msgid "Original row data" msgstr "原始行數據" -#: importer/models.py:666 machine/models.py:111 +#: importer/models.py:666 machine/models.py:114 msgid "Errors" msgstr "錯誤" -#: importer/models.py:668 part/serializers.py:1190 +#: importer/models.py:668 part/serializers.py:1157 msgid "Valid" msgstr "有效" @@ -4899,55 +4935,55 @@ msgstr "打印機位置" msgid "Scope the printer to a specific location" msgstr "將打印機定位到特定位置" -#: machine/models.py:26 +#: machine/models.py:29 msgid "Name of machine" msgstr "設備名稱" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Machine Type" msgstr "設備類型" -#: machine/models.py:30 +#: machine/models.py:33 msgid "Type of machine" msgstr "設備類型" -#: machine/models.py:35 machine/models.py:147 +#: machine/models.py:38 machine/models.py:150 msgid "Driver" msgstr "驅動" -#: machine/models.py:36 +#: machine/models.py:39 msgid "Driver used for the machine" msgstr "設備使用的驅動器" -#: machine/models.py:40 +#: machine/models.py:43 msgid "Machines can be disabled" msgstr "可以禁用設備" -#: machine/models.py:96 +#: machine/models.py:99 msgid "Driver available" msgstr "可用驅動" -#: machine/models.py:101 +#: machine/models.py:104 msgid "No errors" msgstr "無錯誤" -#: machine/models.py:106 +#: machine/models.py:109 msgid "Initialized" msgstr "已初始化" -#: machine/models.py:118 +#: machine/models.py:121 msgid "Machine status" msgstr "設備狀態" -#: machine/models.py:146 +#: machine/models.py:149 msgid "Machine" msgstr "設備" -#: machine/models.py:158 +#: machine/models.py:161 msgid "Machine Config" msgstr "設備配置" -#: machine/models.py:163 +#: machine/models.py:166 msgid "Config type" msgstr "配置類型" @@ -5066,7 +5102,7 @@ msgstr "訂單" msgid "Order Complete" msgstr "訂單完成" -#: order/api.py:579 order/api.py:583 order/serializers.py:794 +#: order/api.py:579 order/api.py:583 order/serializers.py:755 msgid "Internal Part" msgstr "內部零件" @@ -5124,11 +5160,11 @@ msgstr "總價格" msgid "Total price for this order" msgstr "此訂單的總價" -#: order/models.py:103 order/serializers.py:65 +#: order/models.py:103 order/serializers.py:66 msgid "Order Currency" msgstr "訂單貨幣" -#: order/models.py:106 order/serializers.py:66 +#: order/models.py:106 order/serializers.py:67 msgid "Currency for this order (leave blank to use company default)" msgstr "此訂單的貨幣 (留空以使用公司默認值)" @@ -5168,7 +5204,7 @@ msgstr "開始日期" msgid "Scheduled start date for this order" msgstr "此訂單的預定開始日期" -#: order/models.py:517 order/models.py:2053 order/serializers.py:348 +#: order/models.py:517 order/models.py:2053 order/serializers.py:302 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "預計日期" @@ -5477,8 +5513,8 @@ msgstr "審核人" msgid "User who checked this shipment" msgstr "檢查此裝運的用户" -#: order/models.py:2598 order/models.py:2850 order/serializers.py:1856 -#: order/serializers.py:1990 order/serializers.py:2081 +#: order/models.py:2598 order/models.py:2850 order/serializers.py:1846 +#: order/serializers.py:1980 order/serializers.py:2071 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" @@ -5544,8 +5580,8 @@ msgstr "分配數量不能超過庫存數量" msgid "Allocation quantity must be greater than zero" msgstr "分配的數量必須大於零" -#: order/models.py:2828 order/models.py:3884 order/serializers.py:1726 -#: order/serializers.py:2812 +#: order/models.py:2828 order/models.py:3884 order/serializers.py:1716 +#: order/serializers.py:2815 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化庫存項目的數量必須為1" @@ -5685,39 +5721,7 @@ msgstr "" msgid "Transfer Order Allocation" msgstr "" -#: order/serializers.py:79 -msgid "Order ID" -msgstr "訂單ID" - -#: order/serializers.py:79 -msgid "ID of the order to duplicate" -msgstr "要複製的訂單ID" - -#: order/serializers.py:85 -msgid "Copy Lines" -msgstr "複製行" - -#: order/serializers.py:86 -msgid "Copy line items from the original order" -msgstr "從原始訂單複製行項目" - -#: order/serializers.py:92 -msgid "Copy Extra Lines" -msgstr "複製額外行" - -#: order/serializers.py:93 -msgid "Copy extra line items from the original order" -msgstr "從原始訂單複製額外的行項目" - -#: order/serializers.py:99 part/serializers.py:450 -msgid "Copy Parameters" -msgstr "複製參數" - -#: order/serializers.py:100 -msgid "Copy order parameters from the original order" -msgstr "從原始訂單複製訂單參數" - -#: order/serializers.py:119 order/serializers.py:2114 +#: order/serializers.py:86 order/serializers.py:2104 #: 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 @@ -5725,287 +5729,275 @@ msgstr "從原始訂單複製訂單參數" msgid "Line Items" msgstr "行項目" -#: order/serializers.py:124 +#: order/serializers.py:91 msgid "Completed Lines" msgstr "已完成行項目" -#: order/serializers.py:132 +#: order/serializers.py:99 msgid "Custom Status Key" msgstr "" -#: order/serializers.py:133 +#: order/serializers.py:100 msgid "Update order status to a custom value for this logical value" msgstr "" -#: order/serializers.py:199 -msgid "Duplicate Order" -msgstr "複製訂單" - -#: order/serializers.py:200 -msgid "Specify options for duplicating this order" -msgstr "指定複製此訂單的選項" - -#: order/serializers.py:221 +#: order/serializers.py:184 msgid "Custom status key must be an integer" msgstr "" -#: order/serializers.py:228 +#: order/serializers.py:191 msgid "Invalid custom status key" msgstr "" -#: order/serializers.py:231 +#: order/serializers.py:194 msgid "Invalid custom status key for this order status" msgstr "" -#: order/serializers.py:305 -msgid "Invalid order ID" -msgstr "訂單ID不正確" - -#: order/serializers.py:485 +#: order/serializers.py:446 msgid "Supplier Name" msgstr "供應商名稱" -#: order/serializers.py:534 order/serializers.py:2561 +#: order/serializers.py:495 order/serializers.py:2564 msgid "Order cannot be cancelled" msgstr "訂單不能取消" -#: order/serializers.py:549 order/serializers.py:1747 +#: order/serializers.py:510 order/serializers.py:1737 msgid "Allow order to be closed with incomplete line items" msgstr "允許關閉行項目不完整的訂單" -#: order/serializers.py:559 order/serializers.py:1757 +#: order/serializers.py:520 order/serializers.py:1747 msgid "Order has incomplete line items" msgstr "訂單中的行項目不完整" -#: order/serializers.py:679 +#: order/serializers.py:640 msgid "Order is not open" msgstr "訂單未打開" -#: order/serializers.py:717 +#: order/serializers.py:678 msgid "Auto Pricing" msgstr "自動定價" -#: order/serializers.py:719 +#: order/serializers.py:680 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根據供應商零件數據自動計算採購價格" -#: order/serializers.py:736 +#: order/serializers.py:697 msgid "Purchase price currency" msgstr "購買價格貨幣" -#: order/serializers.py:767 +#: order/serializers.py:728 msgid "Merge Items" msgstr "合併項目" -#: order/serializers.py:769 +#: order/serializers.py:730 msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:776 part/serializers.py:519 +#: order/serializers.py:737 part/serializers.py:459 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:790 part/models.py:1156 part/serializers.py:378 +#: order/serializers.py:751 part/models.py:1157 part/serializers.py:379 msgid "Internal Part Number" msgstr "內部零件編號" -#: order/serializers.py:798 +#: order/serializers.py:759 msgid "Internal Part Name" msgstr "內部零件名稱" -#: order/serializers.py:814 +#: order/serializers.py:775 msgid "Supplier part must be specified" msgstr "必須指定供應商零件" -#: order/serializers.py:817 +#: order/serializers.py:778 msgid "Purchase order must be specified" msgstr "必須指定採購訂單" -#: order/serializers.py:825 +#: order/serializers.py:786 msgid "Supplier must match purchase order" msgstr "供應商必須匹配採購訂單" -#: order/serializers.py:826 +#: order/serializers.py:787 msgid "Purchase order must match supplier" msgstr "採購訂單必須與供應商匹配" -#: order/serializers.py:878 order/serializers.py:1827 order/serializers.py:2964 +#: order/serializers.py:839 order/serializers.py:1817 order/serializers.py:2967 msgid "Line Item" msgstr "行項目" -#: order/serializers.py:887 order/serializers.py:1027 order/serializers.py:2315 +#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2313 msgid "Select destination location for received items" msgstr "為收到的物品選擇目的地位置" -#: order/serializers.py:903 +#: order/serializers.py:864 msgid "Enter batch code for incoming stock items" msgstr "輸入入庫項目的批號" -#: order/serializers.py:910 stock/models.py:1212 +#: order/serializers.py:871 stock/models.py:1212 #: templates/email/stale_stock_notification.html:22 users/models.py:135 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:911 +#: order/serializers.py:872 msgid "Enter expiry date for incoming stock items" msgstr "輸入入庫庫存項目的到期日" -#: order/serializers.py:919 +#: order/serializers.py:880 msgid "Enter serial numbers for incoming stock items" msgstr "輸入入庫庫存項目的序列號" -#: order/serializers.py:929 +#: order/serializers.py:890 msgid "Override packaging information for incoming stock items" msgstr "覆蓋傳入庫存項目的包裝資料" -#: order/serializers.py:937 order/serializers.py:2320 +#: order/serializers.py:898 order/serializers.py:2318 msgid "Additional note for incoming stock items" msgstr "傳入庫存項目的附加説明" -#: order/serializers.py:944 +#: order/serializers.py:905 msgid "Barcode" msgstr "條形碼" -#: order/serializers.py:945 +#: order/serializers.py:906 msgid "Scanned barcode" msgstr "掃描條形碼" -#: order/serializers.py:961 +#: order/serializers.py:922 msgid "Barcode is already in use" msgstr "條形碼已被使用" -#: order/serializers.py:1044 order/serializers.py:2339 +#: order/serializers.py:1005 order/serializers.py:2337 msgid "Line items must be provided" msgstr "必須提供行項目" -#: order/serializers.py:1063 +#: order/serializers.py:1024 msgid "Destination location must be specified" msgstr "必須指定目標位置" -#: order/serializers.py:1070 +#: order/serializers.py:1031 msgid "Supplied barcode values must be unique" msgstr "提供的條形碼值必須是唯一的" -#: order/serializers.py:1197 +#: order/serializers.py:1165 msgid "Shipments" msgstr "配送紀錄" -#: order/serializers.py:1201 +#: order/serializers.py:1169 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1205 +#: order/serializers.py:1173 msgid "Allocated Lines" msgstr "已分配行" -#: order/serializers.py:1400 +#: order/serializers.py:1368 msgid "Sale price currency" msgstr "售出價格貨幣" -#: order/serializers.py:1449 +#: order/serializers.py:1420 msgid "Allocated Items" msgstr "已分配項目" -#: order/serializers.py:1649 +#: order/serializers.py:1639 msgid "No shipment details provided" msgstr "未提供裝運詳細信息" -#: order/serializers.py:1681 order/serializers.py:1836 -#: order/serializers.py:2776 order/serializers.py:2973 +#: order/serializers.py:1671 order/serializers.py:1826 +#: order/serializers.py:2779 order/serializers.py:2976 msgid "Line item is not associated with this order" msgstr "行項目與此訂單不關聯" -#: order/serializers.py:1700 order/serializers.py:2795 +#: order/serializers.py:1690 order/serializers.py:2798 msgid "Quantity must be positive" msgstr "數量必須為正" -#: order/serializers.py:1721 +#: order/serializers.py:1711 msgid "Stock item has not passed all required tests" msgstr "" -#: order/serializers.py:1846 order/serializers.py:2983 +#: order/serializers.py:1836 order/serializers.py:2986 msgid "Enter serial numbers to allocate" msgstr "輸入要分配的序列號" -#: order/serializers.py:1868 order/serializers.py:1998 -#: order/serializers.py:2128 +#: order/serializers.py:1858 order/serializers.py:1988 +#: order/serializers.py:2118 msgid "Shipment has already been shipped" msgstr "貨物已發出" -#: order/serializers.py:1871 order/serializers.py:2001 -#: order/serializers.py:2131 +#: order/serializers.py:1861 order/serializers.py:1991 +#: order/serializers.py:2121 msgid "Shipment is not associated with this order" msgstr "發貨與此訂單無關" -#: order/serializers.py:1934 order/serializers.py:3039 +#: order/serializers.py:1924 order/serializers.py:3042 msgid "No match found for the following serial numbers" msgstr "未找到以下序列號的匹配項" -#: order/serializers.py:1941 order/serializers.py:3046 +#: order/serializers.py:1931 order/serializers.py:3049 msgid "The following serial numbers are unavailable" msgstr "以下序列號不可用" -#: order/serializers.py:2063 +#: order/serializers.py:2053 msgid "Stock location where items are sourced (leave blank to use any location)" msgstr "" -#: order/serializers.py:2073 +#: order/serializers.py:2063 msgid "Exclude stock items from this location" msgstr "" -#: order/serializers.py:2082 +#: order/serializers.py:2072 msgid "Assign allocations to this shipment" msgstr "" -#: order/serializers.py:2089 +#: order/serializers.py:2079 msgid "Allow stock to be taken from multiple locations to fulfil a single line item" msgstr "" -#: order/serializers.py:2103 +#: order/serializers.py:2093 msgid "Serialized Stock" msgstr "" -#: order/serializers.py:2105 +#: order/serializers.py:2095 msgid "Control whether serialized stock items are included in auto-allocation" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2106 msgid "Limit allocation to these line items (leave blank to allocate all lines)" msgstr "" -#: order/serializers.py:2142 +#: order/serializers.py:2132 msgid "Line item does not belong to this order" msgstr "" -#: order/serializers.py:2281 +#: order/serializers.py:2279 msgid "Return order line item" msgstr "退貨訂單行項目" -#: order/serializers.py:2291 +#: order/serializers.py:2289 msgid "Line item does not match return order" msgstr "行項目與退貨訂單不匹配" -#: order/serializers.py:2294 +#: order/serializers.py:2292 msgid "Line item has already been received" msgstr "行項目已收到" -#: order/serializers.py:2331 +#: order/serializers.py:2329 msgid "Items can only be received against orders which are in progress" msgstr "只能根據正在進行的訂單接收物品" -#: order/serializers.py:2407 +#: order/serializers.py:2405 msgid "Quantity to return" msgstr "退回數量" -#: order/serializers.py:2432 +#: order/serializers.py:2430 msgid "Line price currency" msgstr "行價格貨幣" -#: order/serializers.py:2576 +#: order/serializers.py:2579 msgid "Allow order to complete with incomplete allocations" msgstr "" -#: order/serializers.py:2586 +#: order/serializers.py:2589 msgid "Order has incomplete allocations" msgstr "" @@ -6145,59 +6137,59 @@ msgstr "有修訂版本" msgid "BOM Valid" msgstr "物料清單合規" -#: part/api.py:995 +#: part/api.py:997 msgid "Cascade Categories" msgstr "級聯類別" -#: part/api.py:996 +#: part/api.py:998 msgid "If true, include items in child categories of the given category" msgstr "若為 true,則包含給定類別的子類別中的項目" -#: part/api.py:1002 +#: part/api.py:1004 msgid "Filter by numeric category ID or the literal 'null'" msgstr "依數字類別 ID 或常值 'null' 篩選" -#: part/api.py:1315 +#: part/api.py:1317 msgid "Assembly part is active" msgstr "組件零件處於作用中狀態" -#: part/api.py:1319 +#: part/api.py:1321 msgid "Assembly part is trackable" msgstr "組件零件可追蹤" -#: part/api.py:1323 +#: part/api.py:1325 msgid "Assembly part is testable" msgstr "裝配部份是可測試的" -#: part/api.py:1327 +#: part/api.py:1329 msgid "Assembly part is locked" msgstr "" -#: part/api.py:1332 +#: part/api.py:1334 msgid "Component part is active" msgstr "子零件處於作用中狀態" -#: part/api.py:1336 +#: part/api.py:1338 msgid "Component part is trackable" msgstr "子零件可追蹤" -#: part/api.py:1340 +#: part/api.py:1342 msgid "Component part is testable" msgstr "組件部份是可測試的" -#: part/api.py:1344 +#: part/api.py:1346 msgid "Component part is an assembly" msgstr "子零件是一個組件" -#: part/api.py:1348 +#: part/api.py:1350 msgid "Component part is virtual" msgstr "子零件是虛擬的" -#: part/api.py:1352 +#: part/api.py:1354 msgid "Has available stock" msgstr "有可用庫存" -#: part/api.py:1409 +#: part/api.py:1411 msgid "Uses" msgstr "使用" @@ -6210,7 +6202,7 @@ msgstr "零件類別" msgid "Part Categories" msgstr "零件類別" -#: part/models.py:111 part/models.py:1192 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "默認位置" @@ -6259,656 +6251,660 @@ msgstr "默認值" msgid "Default Parameter Value" msgstr "默認參數值" -#: part/models.py:528 part/serializers.py:135 users/ruleset.py:30 +#: part/models.py:529 part/serializers.py:135 users/ruleset.py:30 msgid "Parts" msgstr "零件" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "無法刪除已鎖定零件的參數" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "無法修改已鎖定零件的參數" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "無法刪除這個零件,因為它已被鎖定" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "無法刪除這個零件,因為它仍然處於活動狀態" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "無法刪除這個零件,因為它被使用在了裝配中" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "零件 \"{self}\" 不能用在 \"{parent}\" 的物料清單 (遞歸)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "零件 \"{parent}\" 被使用在了 \"{self}\" 的物料清單 (遞歸)" -#: part/models.py:772 +#: part/models.py:773 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "內部零件號必須匹配正則表達式 {pattern}" -#: part/models.py:780 +#: part/models.py:781 msgid "Part cannot be a revision of itself" msgstr "零件不能是對自身的修訂" -#: part/models.py:787 +#: part/models.py:788 msgid "Revision code must be specified for a part marked as a revision" msgstr "標記為修訂版的零件必須指定修訂版代碼" -#: part/models.py:795 +#: part/models.py:796 msgid "Revisions are only allowed for assembly parts" msgstr "修訂僅對裝配零件允許" -#: part/models.py:802 +#: part/models.py:803 msgid "Cannot make a revision of a template part" msgstr "無法對模版零件進行修訂" -#: part/models.py:808 +#: part/models.py:809 msgid "Parent part must point to the same template" msgstr "上級零件必須指向相同的模版" -#: part/models.py:906 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "該序列號庫存項己存在" -#: part/models.py:1036 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件設置中不允許重複的內部零件號" -#: part/models.py:1049 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "重複的零件修訂版本已經存在。" -#: part/models.py:1059 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "有這個名字,內部零件號,和修訂版本的零件已經存在" -#: part/models.py:1074 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到結構性零件類別!" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Part name" msgstr "零件名稱" -#: part/models.py:1111 +#: part/models.py:1112 msgid "Is Template" msgstr "是模板" -#: part/models.py:1112 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "這個零件是一個模版零件嗎?" -#: part/models.py:1122 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "這個零件是另一零件的變體嗎?" -#: part/models.py:1123 +#: part/models.py:1124 msgid "Variant Of" msgstr "變體" -#: part/models.py:1130 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "零件描述(可選)" -#: part/models.py:1137 +#: part/models.py:1138 msgid "Keywords" msgstr "關鍵詞" -#: part/models.py:1138 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索結果可見性的零件關鍵字" -#: part/models.py:1148 +#: part/models.py:1149 msgid "Part category" msgstr "零件類別" -#: part/models.py:1155 part/serializers.py:870 +#: part/models.py:1156 part/serializers.py:811 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "內部零件號 IPN" -#: part/models.py:1163 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "零件修訂版本或版本號" -#: part/models.py:1164 report/models.py:234 +#: part/models.py:1165 report/models.py:234 msgid "Revision" msgstr "版本" -#: part/models.py:1173 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "這零件是另一零件的修訂版本嗎?" -#: part/models.py:1174 +#: part/models.py:1175 msgid "Revision Of" msgstr "修訂版本" -#: part/models.py:1190 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "該物品通常存放在哪裏?" -#: part/models.py:1227 +#: part/models.py:1228 msgid "Default Expiry" msgstr "默認到期" -#: part/models.py:1228 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件庫存項的過期時間 (天)" -#: part/models.py:1236 part/serializers.py:940 +#: part/models.py:1237 part/serializers.py:881 msgid "Minimum Stock" msgstr "最低庫存" -#: part/models.py:1237 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "允許的最小庫存量" -#: part/models.py:1245 part/serializers.py:944 +#: part/models.py:1246 part/serializers.py:885 msgid "Maximum Stock" msgstr "" -#: part/models.py:1246 +#: part/models.py:1247 msgid "Maximum allowed stock level" msgstr "" -#: part/models.py:1255 +#: part/models.py:1256 msgid "Units of measure for this part" msgstr "此零件的計量單位" -#: part/models.py:1262 +#: part/models.py:1263 msgid "Can this part be built from other parts?" msgstr "這個零件可由其他零件加工而成嗎?" -#: part/models.py:1268 +#: part/models.py:1269 msgid "Can this part be used to build other parts?" msgstr "這個零件可用於創建其他零件嗎?" -#: part/models.py:1274 +#: part/models.py:1275 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追蹤功能" -#: part/models.py:1280 +#: part/models.py:1281 msgid "Can this part have test results recorded against it?" msgstr "這一部分能否記錄到測試結果?" -#: part/models.py:1286 +#: part/models.py:1287 msgid "Can this part be purchased from external suppliers?" msgstr "這個零件可從外部供應商購買嗎?" -#: part/models.py:1292 +#: part/models.py:1293 msgid "Can this part be sold to customers?" msgstr "此零件可以銷售給客户嗎?" -#: part/models.py:1296 +#: part/models.py:1297 msgid "Is this part active?" msgstr "這個零件是否已激活?" -#: part/models.py:1302 +#: part/models.py:1303 msgid "Locked parts cannot be edited" msgstr "無法編輯鎖定的零件" -#: part/models.py:1308 +#: part/models.py:1309 msgid "Is this a virtual part, such as a software product or license?" msgstr "這是一個虛擬零件,例如一個軟件產品或許可證嗎?" -#: part/models.py:1313 +#: part/models.py:1315 +msgid "Is this part consumable, such as glue or a fastener?" +msgstr "" + +#: part/models.py:1320 msgid "BOM Validated" msgstr "BOM 已驗證" -#: part/models.py:1314 +#: part/models.py:1321 msgid "Is the BOM for this part valid?" msgstr "此零件的 BOM 是否已通過驗證?" -#: part/models.py:1320 +#: part/models.py:1327 msgid "BOM checksum" msgstr "物料清單校驗和" -#: part/models.py:1321 +#: part/models.py:1328 msgid "Stored BOM checksum" msgstr "保存的物料清單校驗和" -#: part/models.py:1329 +#: part/models.py:1336 msgid "BOM checked by" msgstr "物料清單檢查人" -#: part/models.py:1334 +#: part/models.py:1341 msgid "BOM checked date" msgstr "物料清單檢查日期" -#: part/models.py:1350 +#: part/models.py:1357 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1360 +#: part/models.py:1367 msgid "Owner responsible for this part" msgstr "此零件的負責人" -#: part/models.py:2367 +#: part/models.py:2374 msgid "Sell multiple" msgstr "出售多個" -#: part/models.py:3376 +#: part/models.py:3380 msgid "Currency used to cache pricing calculations" msgstr "用於緩存定價計算的貨幣" -#: part/models.py:3392 +#: part/models.py:3396 msgid "Minimum BOM Cost" msgstr "最低物料清單成本" -#: part/models.py:3393 +#: part/models.py:3397 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3399 +#: part/models.py:3403 msgid "Maximum BOM Cost" msgstr "物料清單的最高成本" -#: part/models.py:3400 +#: part/models.py:3404 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3406 +#: part/models.py:3410 msgid "Minimum Purchase Cost" msgstr "最低購買成本" -#: part/models.py:3407 +#: part/models.py:3411 msgid "Minimum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3413 +#: part/models.py:3417 msgid "Maximum Purchase Cost" msgstr "最大購買成本" -#: part/models.py:3414 +#: part/models.py:3418 msgid "Maximum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3420 +#: part/models.py:3424 msgid "Minimum Internal Price" msgstr "最低內部價格" -#: part/models.py:3421 +#: part/models.py:3425 msgid "Minimum cost based on internal price breaks" msgstr "基於內部批發價的最低成本" -#: part/models.py:3427 +#: part/models.py:3431 msgid "Maximum Internal Price" msgstr "最大內部價格" -#: part/models.py:3428 +#: part/models.py:3432 msgid "Maximum cost based on internal price breaks" msgstr "基於內部批發價的最高成本" -#: part/models.py:3434 +#: part/models.py:3438 msgid "Minimum Supplier Price" msgstr "供應商最低價格" -#: part/models.py:3435 +#: part/models.py:3439 msgid "Minimum price of part from external suppliers" msgstr "外部供應商零件的最低價格" -#: part/models.py:3441 +#: part/models.py:3445 msgid "Maximum Supplier Price" msgstr "供應商最高價格" -#: part/models.py:3442 +#: part/models.py:3446 msgid "Maximum price of part from external suppliers" msgstr "來自外部供應商的商零件的最高價格" -#: part/models.py:3448 +#: part/models.py:3452 msgid "Minimum Variant Cost" msgstr "最小變體成本" -#: part/models.py:3449 +#: part/models.py:3453 msgid "Calculated minimum cost of variant parts" msgstr "計算出的變體零件的最低成本" -#: part/models.py:3455 +#: part/models.py:3459 msgid "Maximum Variant Cost" msgstr "最大變體成本" -#: part/models.py:3456 +#: part/models.py:3460 msgid "Calculated maximum cost of variant parts" msgstr "計算出的變體零件的最大成本" -#: part/models.py:3462 part/models.py:3476 +#: part/models.py:3466 part/models.py:3480 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3463 +#: part/models.py:3467 msgid "Override minimum cost" msgstr "覆蓋最低成本" -#: part/models.py:3469 part/models.py:3483 +#: part/models.py:3473 part/models.py:3487 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3470 +#: part/models.py:3474 msgid "Override maximum cost" msgstr "覆蓋最大成本" -#: part/models.py:3477 +#: part/models.py:3481 msgid "Calculated overall minimum cost" msgstr "計算總最低成本" -#: part/models.py:3484 +#: part/models.py:3488 msgid "Calculated overall maximum cost" msgstr "計算總最大成本" -#: part/models.py:3490 +#: part/models.py:3494 msgid "Minimum Sale Price" msgstr "最低售出價格" -#: part/models.py:3491 +#: part/models.py:3495 msgid "Minimum sale price based on price breaks" msgstr "基於批發價的最低售出價格" -#: part/models.py:3497 +#: part/models.py:3501 msgid "Maximum Sale Price" msgstr "最高售出價格" -#: part/models.py:3498 +#: part/models.py:3502 msgid "Maximum sale price based on price breaks" msgstr "基於批發價的最大售出價格" -#: part/models.py:3504 +#: part/models.py:3508 msgid "Minimum Sale Cost" msgstr "最低銷售成本" -#: part/models.py:3505 +#: part/models.py:3509 msgid "Minimum historical sale price" msgstr "歷史最低售出價格" -#: part/models.py:3511 +#: part/models.py:3515 msgid "Maximum Sale Cost" msgstr "最高銷售成本" -#: part/models.py:3512 +#: part/models.py:3516 msgid "Maximum historical sale price" msgstr "歷史最高售出價格" -#: part/models.py:3530 +#: part/models.py:3534 msgid "Part for stocktake" msgstr "用於盤點的零件" -#: part/models.py:3535 +#: part/models.py:3539 msgid "Item Count" msgstr "物品數量" -#: part/models.py:3536 +#: part/models.py:3540 msgid "Number of individual stock entries at time of stocktake" msgstr "盤點時的個別庫存條目數" -#: part/models.py:3544 +#: part/models.py:3548 msgid "Total available stock at time of stocktake" msgstr "盤點時可用庫存總額" -#: part/models.py:3548 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3552 report/templates/report/inventree_test_report.html:106 #: stock/models.py:3270 msgid "Date" msgstr "日期" -#: part/models.py:3549 +#: part/models.py:3553 msgid "Date stocktake was performed" msgstr "進行盤點的日期" -#: part/models.py:3556 +#: part/models.py:3560 msgid "Minimum Stock Cost" msgstr "最低庫存成本" -#: part/models.py:3557 +#: part/models.py:3561 msgid "Estimated minimum cost of stock on hand" msgstr "現有存庫存最低成本估算" -#: part/models.py:3563 +#: part/models.py:3567 msgid "Maximum Stock Cost" msgstr "最高庫存成本" -#: part/models.py:3564 +#: part/models.py:3568 msgid "Estimated maximum cost of stock on hand" msgstr "目前庫存最高成本估算" -#: part/models.py:3574 +#: part/models.py:3578 msgid "Part Sale Price Break" msgstr "零件售出價格折扣" -#: part/models.py:3688 +#: part/models.py:3692 msgid "Part Test Template" msgstr "零件測試模板" -#: part/models.py:3714 +#: part/models.py:3718 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名稱無效 - 必須包含至少一個字母或者數字" -#: part/models.py:3746 +#: part/models.py:3750 msgid "Test templates can only be created for testable parts" msgstr "測試模板只能為可拆分的部件創建" -#: part/models.py:3760 +#: part/models.py:3764 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主鍵的測試模板" -#: part/models.py:3777 +#: part/models.py:3781 msgid "Test Name" msgstr "測試名" -#: part/models.py:3778 +#: part/models.py:3782 msgid "Enter a name for the test" msgstr "輸入測試的名稱" -#: part/models.py:3784 +#: part/models.py:3788 msgid "Test Key" msgstr "測試主鍵" -#: part/models.py:3785 +#: part/models.py:3789 msgid "Simplified key for the test" msgstr "簡化測試主鍵" -#: part/models.py:3792 +#: part/models.py:3796 msgid "Test Description" msgstr "測試説明" -#: part/models.py:3793 +#: part/models.py:3797 msgid "Enter description for this test" msgstr "輸入測試的描述" -#: part/models.py:3797 +#: part/models.py:3801 msgid "Is this test enabled?" msgstr "此測試是否已啓用?" -#: part/models.py:3802 +#: part/models.py:3806 msgid "Required" msgstr "必須的" -#: part/models.py:3803 +#: part/models.py:3807 msgid "Is this test required to pass?" msgstr "需要此測試才能通過嗎?" -#: part/models.py:3808 +#: part/models.py:3812 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3809 +#: part/models.py:3813 msgid "Does this test require a value when adding a test result?" msgstr "添加測試結果時是否需要一個值?" -#: part/models.py:3814 +#: part/models.py:3818 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3816 +#: part/models.py:3820 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加測試結果時是否需要文件附件?" -#: part/models.py:3823 +#: part/models.py:3827 msgid "Valid choices for this test (comma-separated)" msgstr "此測試的有效選擇 (逗號分隔)" -#: part/models.py:3967 +#: part/models.py:3971 msgid "Invalid quantity - no units specified for part" msgstr "" -#: part/models.py:3976 +#: part/models.py:3980 msgid "Quantity must be greater than or equal to zero" msgstr "數量必須大於或等於零" -#: part/models.py:4077 +#: part/models.py:4081 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清單項目不能被修改 - 裝配已鎖定" -#: part/models.py:4084 +#: part/models.py:4088 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清單項目不能修改 - 變體裝配已鎖定" -#: part/models.py:4094 +#: part/models.py:4098 msgid "Select parent part" msgstr "選擇父零件" -#: part/models.py:4104 +#: part/models.py:4108 msgid "Sub part" msgstr "子零件" -#: part/models.py:4105 +#: part/models.py:4109 msgid "Select part to be used in BOM" msgstr "選擇要用於物料清單的零件" -#: part/models.py:4111 part/serializers.py:1730 +#: part/models.py:4115 part/serializers.py:1697 msgid "Amount" msgstr "" -#: part/models.py:4112 +#: part/models.py:4116 msgid "Amount of sub-part consumed to produce one part" msgstr "" -#: part/models.py:4124 +#: part/models.py:4128 msgid "BOM quantity for this BOM item" msgstr "此物料清單項目的數量" -#: part/models.py:4130 +#: part/models.py:4134 msgid "This BOM item is optional" msgstr "此物料清單項目是可選的" -#: part/models.py:4136 +#: part/models.py:4140 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "這個物料清單項目是耗材 (它沒有在生產訂單中被追蹤)" -#: part/models.py:4144 +#: part/models.py:4148 msgid "Setup Quantity" msgstr "建置額外數量" -#: part/models.py:4145 +#: part/models.py:4149 msgid "Extra required quantity for a build, to account for setup losses" msgstr "為彌補建置 / 開工損耗所需的額外數量" -#: part/models.py:4153 +#: part/models.py:4157 msgid "Attrition" msgstr "損耗率" -#: part/models.py:4155 +#: part/models.py:4159 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "製造預估損耗(百分比 0–100)" -#: part/models.py:4166 +#: part/models.py:4170 msgid "Rounding Multiple" msgstr "進位倍數" -#: part/models.py:4168 +#: part/models.py:4172 msgid "Round up required production quantity to nearest multiple of this value" msgstr "將所需生產數量向上取整到此數值的整數倍" -#: part/models.py:4176 +#: part/models.py:4180 msgid "BOM item reference" msgstr "物料清單項目引用" -#: part/models.py:4184 +#: part/models.py:4188 msgid "BOM item notes" msgstr "物料清單項目註釋" -#: part/models.py:4190 +#: part/models.py:4194 msgid "Checksum" msgstr "校驗和" -#: part/models.py:4191 +#: part/models.py:4195 msgid "BOM line checksum" msgstr "物料清單行校驗和" -#: part/models.py:4196 +#: part/models.py:4200 msgid "Validated" msgstr "已驗證" -#: part/models.py:4197 +#: part/models.py:4201 msgid "This BOM item has been validated" msgstr "此物料清單項目已驗證" -#: part/models.py:4202 +#: part/models.py:4206 msgid "Gets inherited" msgstr "獲取繼承的" -#: part/models.py:4203 +#: part/models.py:4207 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清單項目是由物料清單繼承的變體零件" -#: part/models.py:4209 +#: part/models.py:4213 msgid "Stock items for variant parts can be used for this BOM item" msgstr "變體零件的庫存項可以用於此物料清單項目" -#: part/models.py:4316 stock/models.py:977 +#: part/models.py:4349 stock/models.py:977 msgid "Quantity must be integer value for trackable parts" msgstr "可追蹤零件的數量必須是整數" -#: part/models.py:4326 part/models.py:4328 +#: part/models.py:4359 part/models.py:4361 msgid "Sub part must be specified" msgstr "必須指定子零件" -#: part/models.py:4479 +#: part/models.py:4489 msgid "BOM Item Substitute" msgstr "物料清單項目替代品" -#: part/models.py:4500 +#: part/models.py:4510 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能與主零件相同" -#: part/models.py:4513 +#: part/models.py:4523 msgid "Parent BOM item" msgstr "上級物料清單項目" -#: part/models.py:4521 +#: part/models.py:4531 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4537 +#: part/models.py:4547 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4545 +#: part/models.py:4555 msgid "Part 2" msgstr "零件2" -#: part/models.py:4546 +#: part/models.py:4556 msgid "Select Related Part" msgstr "選擇相關的零件" -#: part/models.py:4553 +#: part/models.py:4563 msgid "Note for this relationship" msgstr "此關係的備註" -#: part/models.py:4572 +#: part/models.py:4582 msgid "Part relationship cannot be created between a part and itself" msgstr "零件關係不能在零件和自身之間創建" -#: part/models.py:4577 +#: part/models.py:4587 msgid "Duplicate relationship already exists" msgstr "複製關係已經存在" @@ -6956,331 +6952,319 @@ msgstr "購買此庫存項的貨幣" msgid "File is not an image" msgstr "檔案不是圖片" -#: part/serializers.py:430 -msgid "Original Part" -msgstr "原始零件" - -#: part/serializers.py:431 -msgid "Select original part to duplicate" -msgstr "選擇要複製的原始零件" - -#: part/serializers.py:436 -msgid "Copy Image" -msgstr "複製圖片" - -#: part/serializers.py:437 -msgid "Copy image from original part" -msgstr "從原零件複製圖片" - -#: part/serializers.py:443 -msgid "Copy BOM" -msgstr "複製物料清單" - -#: part/serializers.py:444 -msgid "Copy bill of materials from original part" -msgstr "從原始零件複製材料清單" - -#: part/serializers.py:451 -msgid "Copy parameter data from original part" -msgstr "從原始零件複製參數數據" - -#: part/serializers.py:457 -msgid "Copy Notes" -msgstr "複製備註" - -#: part/serializers.py:458 -msgid "Copy notes from original part" -msgstr "從原始零件複製備註" - -#: part/serializers.py:464 -msgid "Copy Tests" -msgstr "複製測試模板" - -#: part/serializers.py:465 -msgid "Copy test templates from original part" -msgstr "從原始零件複製測試模板" - -#: part/serializers.py:483 +#: part/serializers.py:423 msgid "Initial Stock Quantity" msgstr "初始化庫存數量" -#: part/serializers.py:485 +#: part/serializers.py:425 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。" -#: part/serializers.py:492 +#: part/serializers.py:432 msgid "Initial Stock Location" msgstr "初始化庫存地點" -#: part/serializers.py:493 +#: part/serializers.py:433 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的庫存地點" -#: part/serializers.py:510 +#: part/serializers.py:450 msgid "Select supplier (or leave blank to skip)" msgstr "選擇供應商(或為空以跳過)" -#: part/serializers.py:526 +#: part/serializers.py:466 msgid "Select manufacturer (or leave blank to skip)" msgstr "選擇製造商(或為空)" -#: part/serializers.py:536 +#: part/serializers.py:476 msgid "Manufacturer part number" msgstr "製造商零件號" -#: part/serializers.py:543 +#: part/serializers.py:483 msgid "Selected company is not a valid supplier" msgstr "所選公司不是一個有效的供應商" -#: part/serializers.py:552 +#: part/serializers.py:492 msgid "Selected company is not a valid manufacturer" msgstr "所選公司不是一個有效的製造商" -#: part/serializers.py:563 +#: part/serializers.py:503 msgid "Manufacturer part matching this MPN already exists" msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在" -#: part/serializers.py:570 +#: part/serializers.py:510 msgid "Supplier part matching this SKU already exists" msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在" -#: part/serializers.py:855 +#: part/serializers.py:796 msgid "Category Name" msgstr "類別名稱" -#: part/serializers.py:884 +#: part/serializers.py:825 msgid "Building" msgstr "正在生產" -#: part/serializers.py:885 +#: part/serializers.py:826 msgid "Quantity of this part currently being in production" msgstr "此零件目前生產中數量" -#: part/serializers.py:892 +#: part/serializers.py:833 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件排程待製造未完成數量" -#: part/serializers.py:912 stock/serializers.py:1051 stock/serializers.py:1267 +#: part/serializers.py:853 stock/serializers.py:1051 stock/serializers.py:1267 #: users/ruleset.py:33 msgid "Stock Items" msgstr "庫存項" -#: part/serializers.py:916 +#: part/serializers.py:857 msgid "Revisions" msgstr "修訂" -#: part/serializers.py:920 part/serializers.py:1219 +#: part/serializers.py:861 part/serializers.py:1186 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "庫存總量" -#: part/serializers.py:928 +#: part/serializers.py:869 msgid "Unallocated Stock" msgstr "未分配的庫存" -#: part/serializers.py:936 +#: part/serializers.py:877 msgid "Variant Stock" msgstr "變體庫存" -#: part/serializers.py:1011 +#: part/serializers.py:953 msgid "Duplicate Part" msgstr "重複零件" -#: part/serializers.py:1012 +#: part/serializers.py:954 msgid "Copy initial data from another Part" msgstr "從另一個零件複製初始數據" -#: part/serializers.py:1018 +#: part/serializers.py:959 +msgid "Copy Image" +msgstr "複製圖片" + +#: part/serializers.py:960 +msgid "Copy image from original part" +msgstr "從原零件複製圖片" + +#: part/serializers.py:965 +msgid "Copy BOM" +msgstr "複製物料清單" + +#: part/serializers.py:966 +msgid "Copy bill of materials from original part" +msgstr "從原始零件複製材料清單" + +#: part/serializers.py:971 +msgid "Copy Notes" +msgstr "複製備註" + +#: part/serializers.py:972 +msgid "Copy notes from original part" +msgstr "從原始零件複製備註" + +#: part/serializers.py:977 +msgid "Copy Tests" +msgstr "複製測試模板" + +#: part/serializers.py:978 +msgid "Copy test templates from original part" +msgstr "從原始零件複製測試模板" + +#: part/serializers.py:985 msgid "Initial Stock" msgstr "初始庫存" -#: part/serializers.py:1019 +#: part/serializers.py:986 msgid "Create Part with initial stock quantity" msgstr "創建具有初始庫存數量的零件" -#: part/serializers.py:1025 +#: part/serializers.py:992 msgid "Supplier Information" msgstr "供應商信息" -#: part/serializers.py:1026 +#: part/serializers.py:993 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供應商信息" -#: part/serializers.py:1035 +#: part/serializers.py:1002 msgid "Copy Category Parameters" msgstr "複製類別參數" -#: part/serializers.py:1036 +#: part/serializers.py:1003 msgid "Copy parameter templates from selected part category" msgstr "從選擇的零件複製參數模版" -#: part/serializers.py:1041 +#: part/serializers.py:1008 msgid "Existing Image" msgstr "現有的圖片" -#: part/serializers.py:1042 +#: part/serializers.py:1009 msgid "Filename of an existing part image" msgstr "現有零件圖片的文件名" -#: part/serializers.py:1059 +#: part/serializers.py:1026 msgid "Image file does not exist" msgstr "圖片不存在" -#: part/serializers.py:1191 +#: part/serializers.py:1158 msgid "Validate entire Bill of Materials" msgstr "驗證整個物料清單" -#: part/serializers.py:1225 part/serializers.py:1821 +#: part/serializers.py:1192 part/serializers.py:1788 msgid "Can Build" msgstr "可以創建" -#: part/serializers.py:1242 +#: part/serializers.py:1209 msgid "Required for Build Orders" msgstr "生產工單需求數" -#: part/serializers.py:1247 +#: part/serializers.py:1214 msgid "Allocated to Build Orders" msgstr "已分配至生產工單" -#: part/serializers.py:1254 +#: part/serializers.py:1221 msgid "Required for Sales Orders" msgstr "銷售訂單需求數" -#: part/serializers.py:1258 +#: part/serializers.py:1225 msgid "Allocated to Sales Orders" msgstr "已分配至銷售訂單" -#: part/serializers.py:1318 +#: part/serializers.py:1285 msgid "Part IPN" msgstr "零件 IPN" -#: part/serializers.py:1325 +#: part/serializers.py:1292 msgid "Part Description" msgstr "零件描述" -#: part/serializers.py:1369 +#: part/serializers.py:1336 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "選擇一個零件以產生該零件 (及其任何變體零件) 的盤點資訊" -#: part/serializers.py:1379 +#: part/serializers.py:1346 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "選擇一個類別以包含該類別 (及其子類別) 內的所有零件" -#: part/serializers.py:1389 +#: part/serializers.py:1356 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "選擇一個位置以包含該位置 (及其子位置) 內所有有庫存的零件" -#: part/serializers.py:1396 +#: part/serializers.py:1363 msgid "Generate Stocktake Entries" msgstr "產生盤點項目" -#: part/serializers.py:1397 +#: part/serializers.py:1364 msgid "Save stocktake entries for the selected parts" msgstr "儲存選定零件的盤點項目" -#: part/serializers.py:1404 +#: part/serializers.py:1371 msgid "Generate Report" msgstr "產製報表" -#: part/serializers.py:1405 +#: part/serializers.py:1372 msgid "Generate a stocktake report for the selected parts" msgstr "產製選定零件的庫存報表" -#: part/serializers.py:1508 +#: part/serializers.py:1475 msgid "Minimum Price" msgstr "最低價格" -#: part/serializers.py:1509 +#: part/serializers.py:1476 msgid "Override calculated value for minimum price" msgstr "覆蓋已計算的最低價格值" -#: part/serializers.py:1516 +#: part/serializers.py:1483 msgid "Minimum price currency" msgstr "最低價格貨幣" -#: part/serializers.py:1523 +#: part/serializers.py:1490 msgid "Maximum Price" msgstr "最高價格" -#: part/serializers.py:1524 +#: part/serializers.py:1491 msgid "Override calculated value for maximum price" msgstr "覆蓋已計算的最高價格值" -#: part/serializers.py:1531 +#: part/serializers.py:1498 msgid "Maximum price currency" msgstr "最高價格貨幣" -#: part/serializers.py:1560 +#: part/serializers.py:1527 msgid "Update" msgstr "更新" -#: part/serializers.py:1561 +#: part/serializers.py:1528 msgid "Update pricing for this part" msgstr "更新這個零件的價格" -#: part/serializers.py:1584 +#: part/serializers.py:1551 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "無法將所提供的貨幣轉換為 {default_currency}" -#: part/serializers.py:1591 +#: part/serializers.py:1558 msgid "Minimum price must not be greater than maximum price" msgstr "最低價格不能高於最高價格。" -#: part/serializers.py:1594 +#: part/serializers.py:1561 msgid "Maximum price must not be less than minimum price" msgstr "最高價格不能低於最低價格" -#: part/serializers.py:1731 +#: part/serializers.py:1698 msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1748 +#: part/serializers.py:1715 msgid "Select the parent assembly" msgstr "選擇父裝配" -#: part/serializers.py:1783 +#: part/serializers.py:1750 msgid "Select the component part" msgstr "選擇零部件" -#: part/serializers.py:1903 +#: part/serializers.py:1870 msgid "Invalid quantity format" msgstr "" -#: part/serializers.py:2032 +#: part/serializers.py:1999 msgid "Select part to copy BOM from" msgstr "選擇要複製物料清單的零件" -#: part/serializers.py:2040 +#: part/serializers.py:2007 msgid "Remove Existing Data" msgstr "移除現有數據" -#: part/serializers.py:2041 +#: part/serializers.py:2008 msgid "Remove existing BOM items before copying" msgstr "複製前刪除現有的物料清單項目" -#: part/serializers.py:2046 +#: part/serializers.py:2013 msgid "Include Inherited" msgstr "包含繼承的" -#: part/serializers.py:2047 +#: part/serializers.py:2014 msgid "Include BOM items which are inherited from templated parts" msgstr "包含從模板零件繼承的物料清單項目" -#: part/serializers.py:2052 +#: part/serializers.py:2019 msgid "Skip Invalid Rows" msgstr "跳過無效行" -#: part/serializers.py:2053 +#: part/serializers.py:2020 msgid "Enable this option to skip invalid rows" msgstr "啓用此選項以跳過無效行" -#: part/serializers.py:2058 +#: part/serializers.py:2025 msgid "Copy Substitute Parts" msgstr "複製替代品零件" -#: part/serializers.py:2059 +#: part/serializers.py:2026 msgid "Copy substitute parts when duplicate BOM items" msgstr "複製物料清單項目時複製替代品零件" @@ -7597,7 +7581,7 @@ msgid "Provides native support for barcodes" msgstr "提供條形碼本地支持" #: plugin/builtin/barcodes/inventree_barcode.py:30 -#: plugin/builtin/events/auto_create_builds.py:30 +#: plugin/builtin/events/auto_create_builds.py:31 #: plugin/builtin/events/auto_issue_orders.py:19 #: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 @@ -7641,11 +7625,11 @@ msgstr "短條形碼前綴" msgid "Customize the prefix used for short barcodes, may be useful for environments with multiple InvenTree instances" msgstr "自定義用於短條形碼的前綴,可能對有多個InvenTree實例的環境有用。" -#: plugin/builtin/events/auto_create_builds.py:28 +#: plugin/builtin/events/auto_create_builds.py:29 msgid "Auto Create Builds" msgstr "自動建立生產單" -#: plugin/builtin/events/auto_create_builds.py:31 +#: plugin/builtin/events/auto_create_builds.py:32 msgid "Automatically create build orders for assemblies" msgstr "自動為裝配件建立生產工單" @@ -9453,8 +9437,8 @@ msgstr "未提供庫存項" msgid "Quantity must not exceed available stock quantity ({q})" msgstr "數量不得超過現有庫存量 ({q})" -#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1882 -#: stock/serializers.py:1973 +#: stock/serializers.py:743 stock/serializers.py:1534 stock/serializers.py:1891 +#: stock/serializers.py:1991 msgid "Destination stock location" msgstr "目標庫存位置" @@ -9626,7 +9610,7 @@ msgstr "庫存項已在庫" msgid "Quantity must not be negative" msgstr "數量不可為負" -#: stock/serializers.py:1728 stock/serializers.py:1979 +#: stock/serializers.py:1728 stock/serializers.py:2006 msgid "Merge into existing stock" msgstr "合併至現有庫存" @@ -9642,15 +9626,20 @@ msgstr "庫存交易記錄" msgid "Set stock location for counted items (optional)" msgstr "" -#: stock/serializers.py:1980 +#: stock/serializers.py:1785 stock/serializers.py:1898 +#: stock/serializers.py:1998 +msgid "Structural locations cannot be assigned stock items" +msgstr "" + +#: stock/serializers.py:2007 msgid "Merge returned items into existing stock items if possible" msgstr "可行時將退回項目併入現有庫存" -#: stock/serializers.py:2023 +#: stock/serializers.py:2050 msgid "Next Serial Number" msgstr "下一個序列號" -#: stock/serializers.py:2029 +#: stock/serializers.py:2056 msgid "Previous Serial Number" msgstr "上一個序列號" diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index 40882dd38d..ab7c65d07e 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -6,6 +6,7 @@ from typing import cast from django.conf import settings from django.contrib.auth import authenticate, login from django.contrib.auth.models import User +from django.db import transaction from django.db.models import F, Q from django.http.response import JsonResponse from django.urls import include, path, re_path @@ -684,18 +685,26 @@ class PurchaseOrderLineItemList( # possibly merge duplicate items line_item = None if data.get('merge_items', True): - other_line = models.PurchaseOrderLineItem.objects.filter( - part=data.get('part'), - order=data.get('order'), - target_date=data.get('target_date'), - destination=data.get('destination'), - ).first() + with transaction.atomic(): + # Lock the matching row, so concurrent line creations cannot + # both read the same starting quantity (lost update) + other_line = ( + models.PurchaseOrderLineItem.objects + .select_for_update() + .filter( + part=data.get('part'), + order=data.get('order'), + target_date=data.get('target_date'), + destination=data.get('destination'), + ) + .first() + ) - if other_line is not None: - other_line.quantity += Decimal(data.get('quantity', 0)) - other_line.save() + if other_line is not None: + other_line.quantity += Decimal(data.get('quantity', 0)) + other_line.save() - line_item = other_line + line_item = other_line # otherwise create a new line item if line_item is None: diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 74f12e3a5e..c268b02d14 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -44,6 +44,7 @@ from InvenTree.fields import ( RoundingDecimalField, ) from InvenTree.helpers import decimal2string, pui_url +from InvenTree.helpers_db import bulk_create_and_fetch from InvenTree.helpers_model import notify_responsible from order.events import ( PurchaseOrderEvents, @@ -804,7 +805,9 @@ class PurchaseOrder(TotalPriceMixin, Order): if group: # Check if there is already a matching line item (for this PurchaseOrder) - matches = self.lines.filter(part=supplier_part) + # Lock the matching row, so concurrent additions cannot both read + # the same starting quantity (lost update) + matches = self.lines.select_for_update().filter(part=supplier_part) if matches.count() > 0: line = matches.first() @@ -1051,6 +1054,12 @@ class PurchaseOrder(TotalPriceMixin, Order): # Map of tree_id -> note text, for items awaiting a Note once they have a pk pending_notes: dict[int, str] = {} + # Set of users to notify (subscribers to any received part) + notify_users = set() + + # Cache of subscribers per part, to avoid repeated queries for the same part + part_subscribers_cache: dict[int, list] = {} + convert_purchase_price = get_global_setting('PURCHASEORDER_CONVERT_CURRENCY') default_currency = currency_code_default() @@ -1060,9 +1069,14 @@ class PurchaseOrder(TotalPriceMixin, Order): # Cache the custom status options for the StockItem model custom_stock_status_values = stock.models.StockItem.STATUS_CLASS.custom_values() - line_items = PurchaseOrderLineItem.objects.filter( - pk__in=line_items_ids - ).prefetch_related('part', 'part__part', 'order') + # Lock the line item rows, so that concurrent receipts against the same + # lines cannot both read the same 'received' value (lost update) + line_items = ( + PurchaseOrderLineItem.objects + .select_for_update() + .filter(pk__in=line_items_ids) + .prefetch_related('part', 'part__part', 'order') + ) # Map order line items to their corresponding stock items line_item_map = {line.pk: line for line in line_items} @@ -1109,6 +1123,13 @@ class PurchaseOrder(TotalPriceMixin, Order): line.received += quantity line_items_to_update.append(line) + # Track subscribers to this part, to notify them later + # (cache the result per-part, as multiple lines may reference the same part) + if base_part.pk not in part_subscribers_cache: + part_subscribers_cache[base_part.pk] = base_part.get_subscribers() + + notify_users.update(part_subscribers_cache[base_part.pk]) + # Extract optional serial numbers serials = item.get('serials', None) @@ -1188,8 +1209,10 @@ class PurchaseOrder(TotalPriceMixin, Order): stock_data['is_building'] = False # Increase the 'completed' quantity for the build order - build_order.completed += stock_quantity - build_order.save() + # Increment at the database level to prevent lost updates + build_order.completed = F('completed') + stock_quantity + build_order.save(update_fields=['completed']) + build_order.refresh_from_db(fields=['completed']) elif build_order.status == BuildStatus.CANCELLED: # A 'cancelled' build order is ignored pass @@ -1205,26 +1228,21 @@ class PurchaseOrder(TotalPriceMixin, Order): serials=serials, **stock_data ) - for item in new_items: - item.set_status(status, custom_values=custom_stock_status_values) + for new_item in new_items: + new_item.set_status( + status, custom_values=custom_stock_status_values + ) # run validation for serialized items plugin.validate_batch_code - item.validate_batch_code() + new_item.validate_batch_code() # run validation for serialized items plugin.validate_model_instance item.run_plugin_validation() + if line_note: pending_notes[item.tree_id] = line_note stock_items.append(item) else: - new_item = stock.models.StockItem( - **stock_data, - serial='', - tree_id=stock.models.StockItem.getNextTreeID(), - parent=None, - level=0, - lft=1, - rght=2, - ) + new_item = stock.models.StockItem(**stock_data, serial='', parent=None) if line_note: pending_notes[new_item.tree_id] = line_note @@ -1245,18 +1263,10 @@ class PurchaseOrder(TotalPriceMixin, Order): # run validation for items plugin.validate_model_instance item.run_plugin_validation() - stock.models.StockItem.objects.bulk_create( - bulk_create_items, batch_size=250 - ) + # Bulk create the stock items and fetch the newly created instances + new_items = bulk_create_and_fetch(stock.models.StockItem, bulk_create_items) - # Fetch them back again - tree_ids = [item.tree_id for item in bulk_create_items] - - created_items = stock.models.StockItem.objects.filter( - tree_id__in=tree_ids, level=0, lft=1, rght=2, purchase_order=self - ).prefetch_related('location') - - stock_items.extend(created_items) + stock_items.extend(new_items) # Attach any per-line notes to their corresponding stock item if pending_notes: @@ -1314,7 +1324,7 @@ class PurchaseOrder(TotalPriceMixin, Order): PurchaseOrder, exclude=user, content=InvenTreeNotificationBodies.ItemsReceived, - extra_users=line.part.part.get_subscribers(), + extra_users=notify_users, ) # Return a list of the created stock items @@ -1646,6 +1656,97 @@ class SalesOrder(TotalPriceMixin, Order): SalesOrderAllocation.objects.bulk_create(new_allocations, batch_size=250) + @transaction.atomic + def allocate_serial_numbers( + self, + line_item: 'SalesOrderLineItem', + quantity: int, + serial_numbers: str, + shipment: Optional['SalesOrderShipment'] = None, + ) -> list['SalesOrderAllocation']: + """Allocate stock items against this SalesOrder, by serial number. + + Arguments: + line_item: The SalesOrderLineItem to allocate against + quantity: The number of serial numbers expected + serial_numbers: A string of serial numbers to allocate (e.g. "1,2,3-5") + shipment: Optional shipment to assign the allocations to + + Raises: + ValidationError: If the line item does not belong to this order, + the serial numbers cannot be parsed, or any of the requested + serial numbers do not exist or are unavailable for allocation. + """ + if line_item.order != self: + raise ValidationError(_('Line item is not associated with this order')) + + part = line_item.part + + serials = InvenTree.helpers.extract_serial_numbers( + serial_numbers, quantity, part.get_latest_serial_number(), part=part + ) + + serials_not_exist = set() + serials_unavailable = set() + stock_items_to_allocate = [] + + for serial in serials: + serial = str(serial).strip() + + items = stock.models.StockItem.objects.filter( + part=part, serial=serial, quantity=1 + ) + + if not items.exists(): + serials_not_exist.add(serial) + continue + + stock_item = items[0] + + if get_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS'): + if ( + stock_item.hasRequiredTests() + and not stock_item.passedAllRequiredTests() + ): + serials_unavailable.add(serial) + continue + + if not stock_item.in_stock: + serials_unavailable.add(serial) + continue + + if stock_item.unallocated_quantity() < 1: + serials_unavailable.add(serial) + continue + + # At this point, the serial number is valid, and can be added to the list + stock_items_to_allocate.append(stock_item) + + if len(serials_not_exist) > 0: + error_msg = _('No match found for the following serial numbers') + error_msg += ': ' + error_msg += ','.join(sorted(serials_not_exist)) + + raise ValidationError({'serial_numbers': error_msg}) + + if len(serials_unavailable) > 0: + error_msg = _('The following serial numbers are unavailable') + error_msg += ': ' + error_msg += ','.join(sorted(serials_unavailable)) + + raise ValidationError({'serial_numbers': error_msg}) + + allocations = [ + SalesOrderAllocation( + line=line_item, item=stock_item, quantity=1, shipment=shipment + ) + for stock_item in stock_items_to_allocate + ] + + SalesOrderAllocation.objects.bulk_create(allocations, batch_size=250) + + return allocations + def is_completed(self) -> bool: """Check if this order is "shipped" (all line items delivered). @@ -2917,8 +3018,10 @@ class SalesOrderAllocation(models.Model): ) # Update the 'shipped' quantity - self.line.shipped += self.quantity - self.line.save() + # Increment at the database level to prevent lost updates + self.line.shipped = F('shipped') + self.quantity + self.line.save(update_fields=['shipped']) + self.line.refresh_from_db(fields=['shipped']) # Update our own reference to the StockItem # (It may have changed if the stock was split) @@ -3108,6 +3211,12 @@ class ReturnOrder(TotalPriceMixin, Order): def _action_complete(self, *args, **kwargs): """Complete this ReturnOrder (if not already completed).""" + # Lock this order against concurrent completion, and re-read the status + # from the database. Without this, two simultaneous completion requests + # can both observe status=IN_PROGRESS, and each would run the completion + # side effects (duplicate events and notifications). + self.status = ReturnOrder.objects.select_for_update().get(pk=self.pk).status + if self.status == ReturnOrderStatus.IN_PROGRESS.value: self.status = ReturnOrderStatus.COMPLETE.value self.complete_date = InvenTree.helpers.current_date() @@ -3194,6 +3303,12 @@ class ReturnOrder(TotalPriceMixin, Order): - Adds a tracking entry to the StockItem - Removes the 'customer' reference from the StockItem """ + # Lock the line item row against concurrent receipt, and re-read it + # from the database. Without this, two simultaneous receipt requests + # can both observe received_date=None, and each would split / process + # the associated stock item. + line = ReturnOrderLineItem.objects.select_for_update().get(pk=line.pk) + # Prevent an item from being "received" multiple times if line.received_date is not None: logger.warning('receive_line_item called with item already returned') @@ -3634,6 +3749,12 @@ class TransferOrder(Order): """ user = kwargs.pop('user', None) + # Lock this order against concurrent completion, and re-read the status + # from the database. Without this, two simultaneous completion requests + # can both observe status=ISSUED, and each would process every allocation + # (duplicating all associated stock operations). + self.status = TransferOrder.objects.select_for_update().get(pk=self.pk).status + if not self.can_complete(raise_error=True, **kwargs): return False @@ -3952,6 +4073,10 @@ class TransferOrderAllocation(models.Model): - Move the StockItem to the new location - Updates the transferred qty - If order is marked as "consume", reduce quantity rather than move + + Raises: + ValidationError: If the stock operation fails - the 'transferred' quantity + is only updated once the stock has actually been moved / consumed. """ order: TransferOrder = self.line.order self.item: stock.models.StockItem # for type hints @@ -3962,36 +4087,59 @@ class TransferOrderAllocation(models.Model): # This means allocations to transfer orders don't affect "available" stock # (otherwise it would permanently reduce available stock) + # The stock item may have been reduced since the allocation was made, + # so limit the transfer to the quantity which is actually available + transfer_quantity = min(self.quantity, self.item.quantity) + + if transfer_quantity <= 0: + # Nothing available to transfer (e.g. the item has since been depleted) + return + if order.consume: # rather than transferring the stock, we simply reduce its quantity to release it from tracked inventory # NOTE: if delete_on_deplete is enabled, this will result in the "transferred stock" panel being empty - # after completion. A more sophesticated immutable tracking that doesn't rely on allocations + # after completion. A more sophisticated immutable tracking that doesn't rely on allocations # would be helpful here - self.item.take_stock( - quantity=self.quantity, + if not self.item.take_stock( + quantity=transfer_quantity, user=user, code=StockHistoryCode.STOCK_REMOVE, transferorder=order, - ) - else: - if self.quantity < self.item.quantity: - # update our own reference to the StockItem which was split - self.item = self.item.splitStock( - quantity=self.quantity, - location=order.destination, - user=user, - transferorder=order, + ): + raise ValidationError( + _('Failed to consume stock item against transfer order') ) - self.save() - else: - # move item directly, we don't have to split - self.item.move( - location=order.destination, user=user, transferorder=order, notes='' + elif transfer_quantity < self.item.quantity: + new_item = self.item.splitStock( + quantity=transfer_quantity, + location=order.destination, + user=user, + transferorder=order, + ) + + if new_item is None: + raise ValidationError( + _('Failed to transfer stock item against transfer order') + ) + + # update our own reference to the StockItem which was split + self.item = new_item + self.save() + else: + # move item directly, we don't have to split + if not self.item.move( + location=order.destination, user=user, transferorder=order, notes='' + ): + raise ValidationError( + _('Failed to transfer stock item against transfer order') ) # Update the transferred qty - self.line.transferred += self.quantity - self.line.save() + # Note: use the quantity which was *actually* transferred + # Increment at the database level to prevent lost updates + self.line.transferred = F('transferred') + transfer_quantity + self.line.save(update_fields=['transferred']) + self.line.refresh_from_db(fields=['transferred']) def _touch_order_updated_at(instance): diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index 5831ca2470..980a9c2cc0 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -41,6 +41,7 @@ from InvenTree.serializers import ( InvenTreeTaggitSerializer, OptionalField, ) +from InvenTree.tasks import batch_offload_tasks from order.status_codes import ( PurchaseOrderStatusGroups, ReturnOrderLineStatus, @@ -49,6 +50,8 @@ from order.status_codes import ( TransferOrderStatusGroups, ) from part.serializers import PartBriefSerializer +from plugin.base.event.events import batch_events +from stock.models import batch_tracking_entries from stock.status_codes import StockStatus from users.serializers import OwnerSerializer, UserSerializer @@ -1007,6 +1010,13 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer): # Ensure barcodes are unique unique_barcodes = set() + # Ensure serial numbers are unique across all line items in this request + # (each line is only validated against the *database* individually) + unique_serials = set() + serials_globally_unique = get_global_setting( + 'SERIAL_NUMBER_GLOBALLY_UNIQUE', False + ) + # Check if the location is not specified for any particular item for item in items: line = item['line_item'] @@ -1032,6 +1042,25 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer): else: unique_barcodes.add(barcode) + if serials := item.get('serials'): + if line.part: + # Scope uniqueness the same way as the database check: + # per part tree, or globally (if so configured) + for serial in serials: + key = ( + str(serial) + if serials_globally_unique + else (line.part.part.tree_id, str(serial)) + ) + + if key in unique_serials: + raise ValidationError( + _('Supplied serial numbers must be unique') + + f': {serial}' + ) + + unique_serials.add(key) + return data def save(self) -> list[stock.models.StockItem]: @@ -1047,9 +1076,15 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer): location = data.get('location', order.destination) try: - items = order.receive_line_items( - location, items, request.user if request else None - ) + with ( + transaction.atomic(), + batch_events(), + batch_tracking_entries(), + batch_offload_tasks(), + ): + items = order.receive_line_items( + location, items, request.user if request else None + ) except (ValidationError, DjangoValidationError) as exc: # Catch model errors and re-throw as DRF errors raise ValidationError(detail=serializers.as_serializer_error(exc)) @@ -1865,104 +1900,23 @@ class SalesOrderSerialAllocationSerializer(serializers.Serializer): return shipment - def validate(self, data): - """Validation for the serializer. - - - Ensure the serial_numbers and quantity fields match - - Check that all serial numbers exist - - Check that the serial numbers are not yet allocated - """ - data = super().validate(data) + def save(self): + """Allocate stock items against the sales order, by serial number.""" + data = self.validated_data + sales_order = self.context['order'] line_item = data['line_item'] quantity = data['quantity'] serial_numbers = data['serial_numbers'] - - part = line_item.part - - try: - data['serials'] = extract_serial_numbers( - serial_numbers, quantity, part.get_latest_serial_number(), part=part - ) - except DjangoValidationError as e: - raise ValidationError({'serial_numbers': e.messages}) - - serials_not_exist = set() - serials_unavailable = set() - stock_items_to_allocate = [] - - for serial in data['serials']: - serial = str(serial).strip() - - items = stock.models.StockItem.objects.filter( - part=part, serial=serial, quantity=1 - ) - - if not items.exists(): - serials_not_exist.add(str(serial)) - continue - - stock_item = items[0] - - if get_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS'): - if ( - stock_item.hasRequiredTests() - and not stock_item.passedAllRequiredTests() - ): - serials_unavailable.add(str(serial)) - continue - - if not stock_item.in_stock: - serials_unavailable.add(str(serial)) - continue - - if stock_item.unallocated_quantity() < 1: - serials_unavailable.add(str(serial)) - continue - - # At this point, the serial number is valid, and can be added to the list - stock_items_to_allocate.append(stock_item) - - if len(serials_not_exist) > 0: - error_msg = _('No match found for the following serial numbers') - error_msg += ': ' - error_msg += ','.join(sorted(serials_not_exist)) - - raise ValidationError({'serial_numbers': error_msg}) - - if len(serials_unavailable) > 0: - error_msg = _('The following serial numbers are unavailable') - error_msg += ': ' - error_msg += ','.join(sorted(serials_unavailable)) - - raise ValidationError({'serial_numbers': error_msg}) - - data['stock_items'] = stock_items_to_allocate - - return data - - def save(self): - """Allocate stock items against the sales order.""" - data = self.validated_data - - line_item = data['line_item'] - stock_items = data['stock_items'] shipment = data.get('shipment', None) - allocations = [] - - for stock_item in stock_items: - # Create a new SalesOrderAllocation - allocations.append( - order.models.SalesOrderAllocation( - line=line_item, item=stock_item, quantity=1, shipment=shipment - ) - ) - - with transaction.atomic(): - order.models.SalesOrderAllocation.objects.bulk_create( - allocations, batch_size=250 + try: + return sales_order.allocate_serial_numbers( + line_item, quantity, serial_numbers, shipment=shipment ) + except (ValidationError, DjangoValidationError) as exc: + # Catch model errors and re-throw as DRF errors + raise ValidationError(detail=serializers.as_serializer_error(exc)) class SalesOrderShipmentAllocationSerializer(serializers.Serializer): diff --git a/src/backend/InvenTree/order/tasks.py b/src/backend/InvenTree/order/tasks.py index 8950b089a5..34e2fa033b 100644 --- a/src/backend/InvenTree/order/tasks.py +++ b/src/backend/InvenTree/order/tasks.py @@ -255,14 +255,28 @@ def complete_sales_order_shipment( At this stage, the shipment is assumed to be complete, and we need to perform the required "processing" tasks. """ - # Do not handle any lookup errors here - # If the shipment cannot be found, then we want the task to fail (and retry later) - shipment = order.models.SalesOrderShipment.objects.get(pk=shipment_id) user = User.objects.filter(pk=user_id).first() if user_id else None - logger.info('Completing SalesOrderShipment <%s>', shipment) + logger.info('Completing SalesOrderShipment <%s>', shipment_id) with transaction.atomic(): + # Lock the shipment row for the duration of the update, + # and re-check that it has not already been completed. + # This guards against duplicate task execution - e.g. if the completion + # request was submitted multiple times before the first task ran. + # Do not handle any lookup errors here: + # If the shipment cannot be found, then we want the task to fail (and retry later) + shipment = order.models.SalesOrderShipment.objects.select_for_update().get( + pk=shipment_id + ) + + if shipment.is_complete(): + logger.warning( + 'SalesOrderShipment <%s> has already been completed - skipping', + shipment_id, + ) + return + for allocation in shipment.allocations.all(): allocation.complete_allocation(user=user) diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index e72bd91de5..1012f41a68 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -5,6 +5,7 @@ import io import json from datetime import date, datetime, timedelta from typing import Optional +from unittest import mock from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError @@ -34,7 +35,7 @@ from order.status_codes import ( ) from part.models import Part from stock.models import StockItem, StockLocation, StockSortOrder -from stock.status_codes import StockStatus +from stock.status_codes import StockHistoryCode, StockStatus from users.models import Owner @@ -1368,6 +1369,43 @@ class PurchaseOrderReceiveTest(OrderTest): self.assertEqual(item.quantity, 10) self.assertEqual(item.batch, 'B-xyz-789') + def test_duplicate_serial_numbers_across_items(self): + """Duplicate serial numbers across line items in a single request are rejected. + + Regression test: each line's serials used to be validated against the + database only, so two lines could claim the same serial number and create + duplicate serialized stock items. + """ + data = { + 'items': [ + {'line_item': 1, 'quantity': 3, 'serial_numbers': '100-102'}, + {'line_item': 1, 'quantity': 3, 'serial_numbers': '102-104'}, + ], + 'location': 1, + } + + # Serial 102 is claimed by both entries - request must be rejected + response = self.post(self.url, data, expected_code=400) + + self.assertIn('Supplied serial numbers must be unique', str(response.data)) + + # No new stock items have been created + self.assertEqual(self.n, StockItem.objects.count()) + + # Non-overlapping serial numbers are accepted + data['items'][1]['serial_numbers'] = '103-105' + + self.post(self.url, data, expected_code=201, max_query_count=250) + + self.assertEqual(self.n + 6, StockItem.objects.count()) + + for serial in range(100, 106): + self.assertEqual( + StockItem.objects.filter(serial=str(serial)).count(), + 1, + f'Expected exactly one stock item with serial {serial}', + ) + def test_receive_large_quantity(self): """Test receipt of a large number of items.""" from stock.status_codes import StockStatus @@ -1416,12 +1454,24 @@ class PurchaseOrderReceiveTest(OrderTest): # Check for expected response self.assertEqual(len(response), N_LINES) + + # Check that the expected number of stock items has been created self.assertEqual(N_ITEMS + N_LINES, StockItem.objects.count()) for item in response: self.assertEqual(item['purchase_order'], po.pk) self.assertEqual(item['status'], StockStatus.QUARANTINED) + stock_item = StockItem.objects.get(pk=item['pk']) + # Check that the item has tracking entries + self.assertEqual(stock_item.tracking_info.count(), 1) + entry = stock_item.tracking_info.first() + self.assertEqual(entry.deltas['quantity'], stock_item.quantity) + self.assertEqual(entry.user, self.user) + self.assertEqual( + entry.tracking_type, StockHistoryCode.RECEIVED_AGAINST_PURCHASE_ORDER + ) + # Check that the order has been completed po.refresh_from_db() self.assertEqual(po.status, PurchaseOrderStatus.COMPLETE) @@ -1430,6 +1480,47 @@ class PurchaseOrderReceiveTest(OrderTest): line.refresh_from_db() self.assertEqual(line.received, line.quantity) + def test_bulk_receive_query_benchmark(self): + """Benchmark: measure the number of DB queries required to receive 100 line items at once.""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + sp = SupplierPart.objects.first() + + po = models.PurchaseOrder.objects.create( + reference='PO-BENCHMARK-100', supplier=sp.supplier + ) + + N_LINES = 100 + + models.PurchaseOrderLineItem.objects.bulk_create([ + models.PurchaseOrderLineItem(order=po, part=sp, quantity=10) + for _ in range(N_LINES) + ]) + + po.place_order() + + url = reverse('api-po-receive', kwargs={'pk': po.pk}) + + lines = po.lines.all() + location = StockLocation.objects.filter(structural=False).first() + + data = { + 'items': [ + {'line_item': line.pk, 'quantity': line.quantity} for line in lines + ], + 'location': location.pk, + } + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + response = self.post( + url, data, max_query_count=400, benchmark=True, format='json' + ) + + self.assertEqual(response.status_code, 201) + self.assertEqual(len(response.data), N_LINES) + def test_packaging(self): """Test that we can supply a 'packaging' value when receiving items.""" line_1 = models.PurchaseOrderLineItem.objects.get(pk=1) @@ -2645,6 +2736,184 @@ class SalesOrderAllocateTest(OrderTest): response = self.post(self.url, data, expected_code=201) +class SalesOrderAllocateSerialsTest(OrderTest): + """Unit tests for allocating stock items against a SalesOrder, by serial number.""" + + @classmethod + def setUpTestData(cls): + """Init routine for this unit test class.""" + super().setUpTestData() + + def setUp(self): + """Init routines for this unit testing class.""" + super().setUp() + + self.assignRole('sales_order.add') + + self.url = reverse('api-so-allocate-serials', kwargs={'pk': 1}) + + self.order = models.SalesOrder.objects.get(pk=1) + + self.part = Part.objects.create( + name='Serial Allocation Part', + salable=True, + trackable=True, + description='A trackable part for serial allocation tests', + ) + + self.line = models.SalesOrderLineItem.objects.create( + order=self.order, part=self.part, quantity=5 + ) + + # Create some serialized stock items for this part + self.stock_items = [ + StockItem.objects.create(part=self.part, quantity=1, serial=str(n)) + for n in range(1, 6) + ] + + self.shipment = models.SalesOrderShipment.objects.create(order=self.order) + + def test_allocate(self): + """Test that we can allocate stock items to a SalesOrder line, by serial number.""" + self.assertEqual(self.order.stock_allocations.count(), 0) + + data = {'line_item': self.line.pk, 'quantity': 3, 'serial_numbers': '1,2,3'} + + self.post(self.url, data, expected_code=201) + + self.assertEqual(self.order.stock_allocations.count(), 3) + + allocated_serials = { + allocation.item.serial for allocation in self.order.stock_allocations.all() + } + self.assertEqual(allocated_serials, {'1', '2', '3'}) + + for allocation in self.order.stock_allocations.all(): + self.assertEqual(allocation.quantity, 1) + self.assertIsNone(allocation.shipment) + + def test_allocate_with_shipment(self): + """Test that allocations are correctly assigned to a provided shipment.""" + data = { + 'line_item': self.line.pk, + 'quantity': 2, + 'serial_numbers': '4,5', + 'shipment': self.shipment.pk, + } + + self.post(self.url, data, expected_code=201) + + for allocation in self.order.stock_allocations.all(): + self.assertEqual(allocation.shipment, self.shipment) + + def test_invalid_line_item(self): + """Test that a line item belonging to a different order is rejected.""" + other_order = models.SalesOrder.objects.exclude(pk=self.order.pk).first() + other_line = models.SalesOrderLineItem.objects.create( + order=other_order, part=self.part, quantity=5 + ) + + data = {'line_item': other_line.pk, 'quantity': 1, 'serial_numbers': '1'} + + response = self.post(self.url, data, expected_code=400) + + self.assertIn('Line item is not associated with this order', str(response.data)) + + self.assertEqual(self.order.stock_allocations.count(), 0) + + def test_shipment_already_shipped(self): + """Test that a shipment which has already been shipped is rejected.""" + self.shipment.shipment_date = date.today() + self.shipment.save() + + data = { + 'line_item': self.line.pk, + 'quantity': 1, + 'serial_numbers': '1', + 'shipment': self.shipment.pk, + } + + response = self.post(self.url, data, expected_code=400) + + self.assertIn('Shipment has already been shipped', str(response.data)) + + self.assertEqual(self.order.stock_allocations.count(), 0) + + def test_shipment_wrong_order(self): + """Test that a shipment belonging to a different order is rejected.""" + other_order = models.SalesOrder.objects.exclude(pk=self.order.pk).first() + other_shipment = models.SalesOrderShipment.objects.create(order=other_order) + + data = { + 'line_item': self.line.pk, + 'quantity': 1, + 'serial_numbers': '1', + 'shipment': other_shipment.pk, + } + + response = self.post(self.url, data, expected_code=400) + + self.assertIn('Shipment is not associated with this order', str(response.data)) + + self.assertEqual(self.order.stock_allocations.count(), 0) + + def test_serial_not_exist(self): + """Test that non-existent serial numbers are rejected.""" + data = {'line_item': self.line.pk, 'quantity': 1, 'serial_numbers': '999'} + + response = self.post(self.url, data, expected_code=400) + + self.assertIn( + 'No match found for the following serial numbers', str(response.data) + ) + self.assertIn('999', str(response.data)) + + self.assertEqual(self.order.stock_allocations.count(), 0) + + def test_serial_unavailable(self): + """Test that an already-allocated serial number is rejected as unavailable.""" + # Fully allocate stock item with serial '1' against some other line + models.SalesOrderAllocation.objects.create( + line=self.line, item=self.stock_items[0], quantity=1 + ) + + data = {'line_item': self.line.pk, 'quantity': 1, 'serial_numbers': '1'} + + response = self.post(self.url, data, expected_code=400) + + self.assertIn( + 'The following serial numbers are unavailable', str(response.data) + ) + self.assertIn('1', str(response.data)) + + # No *additional* allocation should have been created + self.assertEqual(self.order.stock_allocations.count(), 1) + + def test_block_on_required_tests(self): + """Test the SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS setting.""" + from part.models import PartTestTemplate + + self.part.testable = True + self.part.save() + + PartTestTemplate.objects.create( + part=self.part, test_name='A required test', required=True + ) + + data = {'line_item': self.line.pk, 'quantity': 1, 'serial_numbers': '1'} + + set_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS', True) + + response = self.post(self.url, data, expected_code=400) + self.assertIn( + 'The following serial numbers are unavailable', str(response.data) + ) + + set_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS', False) + + self.post(self.url, data, expected_code=201) + + class ReturnOrderTests(InvenTreeAPITestCase): """Unit tests for ReturnOrder API endpoints.""" @@ -2955,6 +3224,99 @@ class ReturnOrderTests(InvenTreeAPITestCase): self.assertIsNone(line.item.sales_order) self.assertEqual(line.item.location.pk, LOCATION_ID) + def test_receive_stale_line_instance(self): + """A second receipt attempt with a stale line instance must be a no-op. + + Regression test: receive_line_item() checked received_date on the + caller's (potentially stale) instance, so two concurrent receipt + requests could both process the same line - splitting the source stock + item twice and orphaning one of the splits. The line is now re-read + (under lock) from the database before the check. + """ + company = Company.objects.get(pk=4) + + rma = models.ReturnOrder.objects.create( + customer=company, description='A return order' + ) + rma.issue_order() + + part = Part.objects.get(pk=25) + + # An untracked item, where only part of the quantity is returned + # (forces the stock item to be split on receipt) + stock_item = StockItem.objects.create(part=part, customer=company, quantity=10) + line = models.ReturnOrderLineItem.objects.create( + order=rma, item=stock_item, quantity=4 + ) + + location = StockLocation.objects.get(pk=1) + + # Two "concurrent" requests each hold their own instance of the line + line_a = models.ReturnOrderLineItem.objects.get(pk=line.pk) + line_b = models.ReturnOrderLineItem.objects.get(pk=line.pk) + + n_items = StockItem.objects.count() + + rma.receive_line_item(line_a, location, None) + + # The stock item has been split: 4 returned, 6 remain with the customer + self.assertEqual(StockItem.objects.count(), n_items + 1) + + stock_item.refresh_from_db() + self.assertEqual(stock_item.quantity, 6) + + line.refresh_from_db() + self.assertIsNotNone(line.received_date) + self.assertEqual(line.item.quantity, 4) + self.assertEqual(line.item.location, location) + + # The second (stale) instance still believes the line is unreceived - + # the receipt must be skipped based on the database state + self.assertIsNone(line_b.received_date) + + rma.receive_line_item(line_b, location, None) + + # No further stock item has been created, and the source is unchanged + self.assertEqual(StockItem.objects.count(), n_items + 1) + + stock_item.refresh_from_db() + self.assertEqual(stock_item.quantity, 6) + + def test_complete_stale_instance_is_noop(self): + """A second completion attempt with a stale instance must be a no-op. + + Regression test: _action_complete() checked 'status' on the caller's + (potentially stale) instance, so two concurrent completion requests + could both run the completion side effects (duplicate COMPLETED events). + The status is now re-read (under lock) from the database before the check. + """ + company = Company.objects.get(pk=4) + + rma = models.ReturnOrder.objects.create( + customer=company, description='A return order' + ) + rma.issue_order() + + # Two "concurrent" requests each hold their own instance of the order + order_a = models.ReturnOrder.objects.get(pk=rma.pk) + order_b = models.ReturnOrder.objects.get(pk=rma.pk) + + order_a.complete_order() + + rma.refresh_from_db() + self.assertEqual(rma.status, ReturnOrderStatus.COMPLETE.value) + + # The second (stale) instance still believes the order is IN_PROGRESS - + # completion must be skipped based on the database state + self.assertEqual(order_b.status, ReturnOrderStatus.IN_PROGRESS.value) + + with mock.patch('order.models.trigger_event') as trigger: + order_b.complete_order() + trigger.assert_not_called() + + rma.refresh_from_db() + self.assertEqual(rma.status, ReturnOrderStatus.COMPLETE.value) + def test_ro_calendar(self): """Test the calendar export endpoint.""" # Full test is in test_po_calendar. Since these use the same backend, test only @@ -3500,6 +3862,158 @@ class TransferOrderTest(OrderTest): location=destination, ) + def test_transfer_order_depleted_allocation(self): + """Completion handles allocations whose stock was reduced after allocation. + + Regression test: the 'transferred' quantity used to be incremented by the + *allocated* quantity even when less (or no) stock was actually moved. + """ + self.assignRole('transfer_order.add') + destination = StockLocation.objects.first() + + to = models.TransferOrder.objects.create( + reference='TO-54321', description='Test TO', destination=destination + ) + + part = Part.objects.exclude(virtual=True).first() + + line_a = models.TransferOrderLineItem.objects.create( + order=to, part=part, quantity=10 + ) + line_b = models.TransferOrderLineItem.objects.create( + order=to, part=part, quantity=10 + ) + + url = reverse('api-transfer-order-issue', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + + item_a = StockItem.objects.create(part=part, quantity=10, batch='to-reduced') + item_b = StockItem.objects.create(part=part, quantity=10, batch='to-depleted') + + models.TransferOrderAllocation.objects.create( + quantity=10, line=line_a, item=item_a + ) + models.TransferOrderAllocation.objects.create( + quantity=10, line=line_b, item=item_b + ) + + # Reduce the available stock *after* the allocations have been made + item_a.quantity = 6 + item_a.save() + + item_b.quantity = 0 + item_b.save() + + url = reverse('api-transfer-order-complete', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + + to.refresh_from_db() + self.assertEqual(to.status, TransferOrderStatus.COMPLETE.value) + + # Only the quantity which was actually available has been transferred + line_a.refresh_from_db() + item_a.refresh_from_db() + self.assertEqual(line_a.transferred, 6) + self.assertEqual(item_a.location, destination) + self.assertEqual(item_a.quantity, 6) + + # The depleted allocation was skipped, without error + line_b.refresh_from_db() + item_b.refresh_from_db() + self.assertEqual(line_b.transferred, 0) + self.assertIsNone(item_b.location) + + def test_transfer_order_consume_depleted_allocation(self): + """Consume-type completion only records the quantity actually consumed.""" + self.assignRole('transfer_order.add') + + to = models.TransferOrder.objects.create( + reference='TO-54322', description='Test TO', consume=True + ) + + part = Part.objects.exclude(virtual=True).first() + + line = models.TransferOrderLineItem.objects.create( + order=to, part=part, quantity=10 + ) + + url = reverse('api-transfer-order-issue', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + + item = StockItem.objects.create( + part=part, quantity=100, batch='to-consume', delete_on_deplete=False + ) + + models.TransferOrderAllocation.objects.create(quantity=10, line=line, item=item) + + # Reduce the available stock *after* the allocation has been made + item.quantity = 4 + item.save() + + url = reverse('api-transfer-order-complete', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + + to.refresh_from_db() + self.assertEqual(to.status, TransferOrderStatus.COMPLETE.value) + + # Only the quantity which was actually available has been consumed + line.refresh_from_db() + item.refresh_from_db() + self.assertEqual(line.transferred, 4) + self.assertEqual(item.quantity, 0) + + def test_transfer_order_complete_stale_instance(self): + """A second completion attempt with a stale instance must be rejected. + + Regression test: _action_complete() only checked the *in-memory* status, + so two concurrent completion requests (each holding its own instance of + the order) could both observe status=ISSUED and each process every + allocation - duplicating all stock movements and double-counting the + 'transferred' quantity. The status is now re-read (under lock) from the + database before the allocations are processed. + """ + self.assignRole('transfer_order.add') + destination = StockLocation.objects.first() + + to = models.TransferOrder.objects.create( + reference='TO-54323', description='Test TO', destination=destination + ) + + part = Part.objects.exclude(virtual=True).first() + + line = models.TransferOrderLineItem.objects.create( + order=to, part=part, quantity=10 + ) + + to.issue_order() + to.refresh_from_db() + self.assertEqual(to.status, TransferOrderStatus.ISSUED.value) + + item = StockItem.objects.create(part=part, quantity=10, batch='to-stale') + models.TransferOrderAllocation.objects.create(quantity=10, line=line, item=item) + + # Two "concurrent" requests each hold their own instance of the order + instance_a = models.TransferOrder.objects.get(pk=to.pk) + instance_b = models.TransferOrder.objects.get(pk=to.pk) + + self.assertTrue(instance_a.complete_order(None)) + + line.refresh_from_db() + self.assertEqual(line.transferred, 10) + + # The second (stale) instance still believes the order is ISSUED, + # but completion must be rejected based on the database state + self.assertEqual(instance_b.status, TransferOrderStatus.ISSUED.value) + + with self.assertRaises(ValidationError) as err: + instance_b.complete_order(None) + + self.assertIn('Order is already complete', str(err.exception)) + + # The transferred quantity has not been double-counted + line.refresh_from_db() + self.assertEqual(line.transferred, 10) + def test_output_options(self): """Test the output options for the TransferOrder detail endpoint.""" self.run_output_test( diff --git a/src/backend/InvenTree/order/test_sales_order.py b/src/backend/InvenTree/order/test_sales_order.py index 5e078fa1c5..2d07a406c4 100644 --- a/src/backend/InvenTree/order/test_sales_order.py +++ b/src/backend/InvenTree/order/test_sales_order.py @@ -6,13 +6,18 @@ from django.contrib.auth import get_user_model from django.contrib.auth.models import Group from django.core.exceptions import ValidationError from django.db.models import Sum +from django.urls import reverse import order.tasks from common.models import InvenTreeSetting, NotificationMessage from common.settings import set_global_setting from company.models import Address, Company from InvenTree import status_codes as status -from InvenTree.unit_test import InvenTreeTestCase, addUserPermission +from InvenTree.unit_test import ( + InvenTreeAPITestCase, + InvenTreeTestCase, + addUserPermission, +) from order.models import ( SalesOrder, SalesOrderAllocation, @@ -21,18 +26,21 @@ from order.models import ( SalesOrderShipment, ) from part.models import Part -from stock.models import StockItem, StockLocation +from stock.models import StockItem, StockItemTracking, StockLocation from users.models import Owner -class SalesOrderTest(InvenTreeTestCase): +class SalesOrderTest(InvenTreeAPITestCase): """Run tests to ensure that the SalesOrder model is working correctly.""" fixtures = ['company', 'users'] + roles = ['sales_order.add'] @classmethod def setUpTestData(cls): """Initial setup for this set of unit tests.""" + super().setUpTestData() + # Create a Company to ship the goods to cls.customer = Company.objects.create( name='ABC Co', description='My customer', is_customer=True @@ -220,6 +228,29 @@ class SalesOrderTest(InvenTreeTestCase): self.assertTrue(self.line.is_fully_allocated()) self.assertEqual(self.line.allocated_quantity(), 50) + def test_complete_allocation_stale_line_instance(self): + """The 'shipped' count is incremented atomically at the database level. + + Simulates two concurrent workers completing different allocations + against the same order line, each holding its own (stale) copy of the line. + """ + self.allocate_stock(True) + + alloc_a, alloc_b = SalesOrderAllocation.objects.filter(line=self.line).order_by( + 'pk' + ) + + # Cache a separate copy of the line on each allocation + self.assertEqual(alloc_a.line.shipped, 0) + self.assertEqual(alloc_b.line.shipped, 0) + + alloc_a.complete_allocation(None) + alloc_b.complete_allocation(None) + + # Both shipped quantities must be counted + self.line.refresh_from_db() + self.assertEqual(self.line.shipped, 50) + def test_allocate_variant(self): """Allocate a variant of the designated item.""" SalesOrderAllocation.objects.create( @@ -337,6 +368,43 @@ class SalesOrderTest(InvenTreeTestCase): self.assertEqual(self.line.fulfilled_quantity(), 50) self.assertEqual(self.line.allocated_quantity(), 50) + def test_complete_shipment_task_is_idempotent(self): + """Duplicate execution of the shipment completion task must not double-ship. + + Regression test: two rapid completion requests could enqueue the background + completion task twice - each execution then completed every allocation again, + double-counting the 'shipped' quantity and re-assigning stock to the customer. + """ + self.allocate_stock(True) + + # Complete the shipment (the task runs inline during testing) + self.shipment.complete_shipment(None) + + self.shipment.refresh_from_db() + self.line.refresh_from_db() + + self.assertTrue(self.shipment.is_complete()) + self.assertEqual(self.line.shipped, 50) + + # A second completion request is rejected outright + self.assertFalse(self.shipment.check_can_complete(raise_error=False)) + + n_items = StockItem.objects.count() + n_tracking = StockItemTracking.objects.count() + + # Simulate a duplicated task execution + # (e.g. a second completion request submitted before the first task ran) + order.tasks.complete_sales_order_shipment(self.shipment.pk, None, None) + + self.line.refresh_from_db() + + # The 'shipped' quantity must not be double-counted + self.assertEqual(self.line.shipped, 50) + + # No additional stock items or tracking entries have been created + self.assertEqual(StockItem.objects.count(), n_items) + self.assertEqual(StockItemTracking.objects.count(), n_tracking) + def test_shipment_many_items(self): """Test completion of a shipment with many items. @@ -371,21 +439,8 @@ class SalesOrderTest(InvenTreeTestCase): allocations = [] stock_items = [] - tree_id = StockItem.objects.all().order_by('-tree_id').first().tree_id - for idx in range(N_ITEMS): - tree_id += 1 - - stock_items.append( - StockItem( - part=part, - quantity=1 + idx % 5, - level=0, - lft=0, - rght=0, - tree_id=tree_id, - ) - ) + stock_items.append(StockItem(part=part, quantity=1 + idx % 5)) StockItem.objects.bulk_create(stock_items) @@ -408,8 +463,18 @@ class SalesOrderTest(InvenTreeTestCase): self.assertFalse(shipment.is_complete()) self.assertTrue(shipment.check_can_complete(raise_error=False)) - # Complete the shipment - shipment.complete_shipment(None) + # Complete the shipment via the API + self.assignRole('sales_order.add') + + url = reverse('api-so-shipment-ship', kwargs={'pk': shipment.pk}) + response = self.post( + url, + expected_code=200, + benchmark=True, + max_query_time=100, + max_query_count=10000, + ) + self.assertEqual(response.status_code, 200) shipment.refresh_from_db() self.assertIsNotNone(shipment.shipment_date) diff --git a/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py b/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py index c290bd6ec9..b4e6be8f8c 100644 --- a/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py +++ b/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py @@ -26,6 +26,7 @@ class Migration(migrations.Migration): ], options={ 'unique_together': {('part', 'quantity')}, + 'verbose_name': 'Part Internal Price Break', }, ), ] diff --git a/src/backend/InvenTree/part/migrations/0152_alter_partpricing_currency.py b/src/backend/InvenTree/part/migrations/0152_alter_partpricing_currency.py new file mode 100644 index 0000000000..de0f646ae9 --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0152_alter_partpricing_currency.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2.15 on 2026-07-08 00:00 + +import InvenTree.validators +import common.currency +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("part", "0151_part_consumable"), + ] + + operations = [ + migrations.AlterField( + model_name="partpricing", + name="currency", + field=models.CharField( + default=common.currency.currency_code_default, + help_text="Currency used to cache pricing calculations", + max_length=10, + validators=[InvenTree.validators.validate_currency_code], + verbose_name="Currency", + ), + ), + ] diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index ee972e10e0..904ed77175 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -53,7 +53,7 @@ from common.settings import get_global_setting from InvenTree import helpers, validators from InvenTree.exceptions import log_error from InvenTree.fields import InvenTreeURLField -from InvenTree.helpers import decimal2money, decimal2string, normalize +from InvenTree.helpers import decimal2string, normalize from order import models as OrderModels from order.status_codes import ( PurchaseOrderStatus, @@ -2214,150 +2214,6 @@ class Part( # which can cause issues down the track pass - def get_price_info(self, quantity=1, buy=True, bom=True, internal=False): - """Return a simplified pricing string for this part. - - Args: - quantity: Number of units to calculate price for - buy: Include supplier pricing (default = True) - bom: Include BOM pricing (default = True) - internal: Include internal pricing (default = False) - """ - price_range = self.get_price_range(quantity, buy, bom, internal) - - if price_range is None: - return None - - min_price, max_price = price_range - - if min_price == max_price: - return min_price - - min_price = normalize(min_price) - max_price = normalize(max_price) - - return f'{min_price} - {max_price}' - - def get_supplier_price_range(self, quantity=1): - """Return the supplier price range of this part. - - Actions: - - Checks if there is any supplier pricing information associated with this Part - - Iterate through available supplier pricing and select (min, max) - - Returns tuple of (min, max) - - Arguments: - quantity: Quantity at which to calculate price (default=1) - - Returns: (min, max) tuple or (None, None) if no supplier pricing available - """ - min_price = None - max_price = None - - for supplier in self.supplier_parts.all(): - price = supplier.get_price(quantity) - - if price is None: - continue - - if min_price is None or price < min_price: - min_price = price - - if max_price is None or price > max_price: - max_price = price - - if min_price is None or max_price is None: - return None - - min_price = normalize(min_price) - max_price = normalize(max_price) - - return (min_price, max_price) - - def get_bom_price_range(self, quantity=1, internal=False, purchase=False): - """Return the price range of the BOM for this part. - - Adds the minimum price for all components in the BOM. - Note: If the BOM contains items without pricing information, - these items cannot be included in the BOM! - """ - min_price = None - max_price = None - - for item in self.get_bom_items().select_related('sub_part'): - if item.sub_part.pk == self.pk: - logger.warning('WARNING: BomItem ID %s contains itself in BOM', item.pk) - continue - - q = Decimal(quantity) - i = Decimal(item.quantity) - - prices = item.sub_part.get_price_range( - q * i, internal=internal, purchase=purchase - ) - - if prices is None: - continue - - low, high = prices - - if min_price is None: - min_price = 0 - - if max_price is None: - max_price = 0 - - min_price += low - max_price += high - - if min_price is None or max_price is None: - return None - - min_price = normalize(min_price) - max_price = normalize(max_price) - - return (min_price, max_price) - - def get_price_range( - self, quantity=1, buy=True, bom=True, internal=False, purchase=False - ): - """Return the price range for this part. - - This price can be either: - - Supplier price (if purchased from suppliers) - - BOM price (if built from other parts) - - Internal price (if set for the part) - - Purchase price (if set for the part) - - Returns: - Minimum of the supplier, BOM, internal or purchase price. If no pricing available, returns None - """ - # only get internal price if set and should be used - if internal and self.has_internal_price_breaks: - internal_price = self.get_internal_price(quantity) - return internal_price, internal_price - - # only get purchase price if set and should be used - if purchase: - purchase_price = self.get_purchase_price(quantity) - if purchase_price: - return purchase_price - - buy_price_range = self.get_supplier_price_range(quantity) if buy else None - bom_price_range = ( - self.get_bom_price_range(quantity, internal=internal) if bom else None - ) - - if buy_price_range is None: - return bom_price_range - - elif bom_price_range is None: - return buy_price_range - return ( - min(buy_price_range[0], bom_price_range[0]), - max(buy_price_range[1], bom_price_range[1]), - ) - base_cost = models.DecimalField( max_digits=19, decimal_places=6, @@ -2374,73 +2230,6 @@ class Part( help_text=_('Sell multiple'), ) - get_price = common.currency.get_price - - @property - def has_price_breaks(self): - """Return True if this part has sale price breaks.""" - return self.price_breaks.exists() - - @property - def price_breaks(self): - """Return the associated price breaks in the correct order.""" - return self.salepricebreaks.order_by('quantity').all() - - @property - def unit_pricing(self): - """Returns the price of this Part at quantity=1.""" - return self.get_price(1) - - def add_price_break(self, quantity, price): - """Create a new price break for this part. - - Args: - quantity: Numerical quantity - price: Must be a Money object - """ - # Check if a price break at that quantity already exists... - if self.price_breaks.filter(quantity=quantity, part=self.pk).exists(): - return - - PartSellPriceBreak.objects.create(part=self, quantity=quantity, price=price) - - def get_internal_price(self, quantity, moq=True, multiples=True, currency=None): - """Return the internal price of this Part at the specified quantity.""" - return common.currency.get_price( - self, quantity, moq, multiples, currency, break_name='internal_price_breaks' - ) - - @property - def has_internal_price_breaks(self): - """Return True if this Part has internal pricing information.""" - return self.internal_price_breaks.exists() - - @property - def internal_price_breaks(self): - """Return the associated price breaks in the correct order.""" - return self.internalpricebreaks.order_by('quantity').all() - - def get_purchase_price(self, quantity): - """Calculate the purchase price for this part at the specified quantity. - - - Looks at available supplier pricing data - - Calculates the price base on the closest price point - """ - currency = currency_code_default() - try: - prices = [ - convert_money(item.purchase_price, currency).amount - for item in self.stock_items.all() - if item.purchase_price - ] - except MissingRate: - prices = None - - if prices: - return min(prices) * quantity, max(prices) * quantity - - return None - @transaction.atomic def copy_bom_from(self, other, clear: bool = True, **kwargs): """Copy the BOM from another part. @@ -2559,6 +2348,14 @@ class Part( if category_template.template.pk in template_ids: continue + # Skip templates which enforce a uniqueness requirement - applying the same + # default value to every part in the category would create conflicting values + if ( + category_template.template.unique + != common.models.ParameterTemplate.UniqueOptions.NONE + ): + continue + template_ids.add(category_template.template.pk) parameters.append( @@ -3001,15 +2798,12 @@ class PartPricing(common.models.MetaMixin): try: self.update_overall_cost() - except Exception: - # If something has happened to the Part model, might throw an error - pass - - try: super().save(*args, **kwargs) except Exception: - # This error may be thrown if there is already duplicate pricing data - pass + log_error('PartPricing.save') + logger.error( + "Could not save PartPricing for part '%s' to the database", self.part + ) def update_bom_cost(self, save=True): """Recalculate BOM cost for the referenced Part instance. @@ -3381,7 +3175,7 @@ class PartPricing(common.models.MetaMixin): max_length=10, verbose_name=_('Currency'), help_text=_('Currency used to cache pricing calculations'), - choices=common.currency.currency_code_mappings(), + validators=[validators.validate_currency_code], ) scheduled_for_update = models.BooleanField(default=False) @@ -3602,6 +3396,7 @@ class PartInternalPriceBreak(common.models.PriceBreak): """Metaclass providing extra model definition.""" unique_together = ('part', 'quantity') + verbose_name = _('Part Internal Price Break') @staticmethod def get_api_url(): @@ -4426,29 +4221,6 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): return required - @property - def price_range(self, internal=False): - """Return the price-range for this BOM item.""" - # get internal price setting - use_internal = get_global_setting('PART_BOM_USE_INTERNAL_PRICE', False) - p_range = self.sub_part.get_price_range( - self.quantity, internal=use_internal and internal - ) - - if p_range is None: - return p_range - - p_min, p_max = p_range - - if p_min == p_max: - return decimal2money(p_min) - - # Convert to better string representation - p_min = decimal2money(p_min) - p_max = decimal2money(p_max) - - return f'{p_min} to {p_max}' - @receiver(post_save, sender=BomItem, dispatch_uid='update_bom_build_lines') def update_bom_build_lines(sender, instance, created, **kwargs): diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index ac70e494a3..5cda505cc9 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -276,7 +276,10 @@ class PartSalePriceSerializer( ) -class PartInternalPriceSerializer(InvenTree.serializers.InvenTreeModelSerializer): +@register_importer() +class PartInternalPriceSerializer( + DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer +): """Serializer for internal prices for Part model.""" class Meta: @@ -1426,7 +1429,9 @@ class PartPricingSerializer(InvenTree.serializers.InvenTreeModelSerializer): 'update', ] - currency = serializers.CharField(allow_null=True, read_only=True) + currency = InvenTree.serializers.InvenTreeCurrencySerializer( + allow_null=True, read_only=True + ) updated = serializers.DateTimeField(allow_null=True, read_only=True) diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 787cc07f53..829be261ba 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -1479,6 +1479,40 @@ class PartCreationTests(PartAPITestBase): self.assertFalse(response.data['active']) self.assertFalse(response.data['purchaseable']) + def test_notes_on_create(self): + """Test that notes can be set when creating a Part.""" + list_url = reverse('api-part-list') + + notes = """ + ### Created from importer + + Notes should persist during part creation. + """ + expected_notes = notes.strip() + + response = self.post( + list_url, + { + 'name': 'part with notes', + 'description': 'Part notes are created in the same request', + 'category': 1, + 'notes': notes, + }, + expected_code=201, + ) + + self.assertEqual(response.data['notes'], expected_notes) + + part = Part.objects.get(pk=response.data['pk']) + self.assertEqual(part.notes, expected_notes) + + detail_url = reverse('api-part-detail', kwargs={'pk': part.pk}) + response = self.get(detail_url, expected_code=200) + self.assertEqual(response.data['notes'], expected_notes) + + response = self.get(list_url, {'limit': 1}, expected_code=200) + self.assertNotIn('notes', response.data['results'][0]) + def test_initial_stock(self): """Tests for initial stock quantity creation.""" @@ -1704,6 +1738,51 @@ class PartCreationTests(PartAPITestBase): prt = Part.objects.get(pk=data['pk']) self.assertEqual(prt.parameters.count(), 3) + def test_category_parameters_unique(self): + """Test that category parameters with a uniqueness requirement are not applied. + + Applying the same default value to every part created in a category + would immediately conflict with a 'unique' parameter template. + """ + cat = PartCategory.objects.get(pk=1) + + normal_template = ParameterTemplate.objects.get(pk=1) + + unique_template = ParameterTemplate.objects.create( + name='Serial Number', + description='A globally unique parameter', + unique=ParameterTemplate.UniqueOptions.GLOBAL, + ) + + PartCategoryParameterTemplate.objects.create( + template=normal_template, category=cat, default_value='Normal Value' + ) + + PartCategoryParameterTemplate.objects.create( + template=unique_template, category=cat, default_value='Fixed Value' + ) + + # Create two parts in this category, copying category parameters + for name in ['Part A', 'Part B']: + data = self.post( + reverse('api-part-list'), + { + 'category': cat.pk, + 'name': name, + 'description': 'A part for testing unique category parameters', + 'copy_category_parameters': True, + }, + expected_code=201, + ).data + + prt = Part.objects.get(pk=data['pk']) + + # The 'normal' parameter should have been copied for each part + self.assertIsNotNone(prt.get_parameter(normal_template.name)) + + # The 'unique' parameter template should *not* have been applied + self.assertIsNone(prt.get_parameter(unique_template.name)) + class PartDetailTests(PartImageTestMixin, PartAPITestBase): """Test that we can create / edit / delete Part objects via the API.""" diff --git a/src/backend/InvenTree/part/test_bom_item.py b/src/backend/InvenTree/part/test_bom_item.py index a6dda90ad1..e72e3442c0 100644 --- a/src/backend/InvenTree/part/test_bom_item.py +++ b/src/backend/InvenTree/part/test_bom_item.py @@ -1,7 +1,5 @@ """Unit tests for the BomItem model.""" -from decimal import Decimal - import django.core.exceptions as django_exceptions from django.db import transaction from django.test import TestCase @@ -171,20 +169,6 @@ class BomItemTest(TestCase): self.assertNotEqual(h1, h2) - def test_pricing(self): - """Test BOM pricing.""" - self.bob.get_price(1) - self.assertEqual( - self.bob.get_bom_price_range(1, internal=True), - (Decimal(29.5), Decimal(89.5)), - ) - # remove internal price for R_2K2_0805 - self.r1.internal_price_breaks.delete() - self.assertEqual( - self.bob.get_bom_price_range(1, internal=True), - (Decimal(27.5), Decimal(87.5)), - ) - def test_substitutes(self): """Tests for BOM item substitutes.""" # We will make some substitute parts for the "orphan" part diff --git a/src/backend/InvenTree/part/test_part.py b/src/backend/InvenTree/part/test_part.py index 05e58d225e..a30bddb864 100644 --- a/src/backend/InvenTree/part/test_part.py +++ b/src/backend/InvenTree/part/test_part.py @@ -250,22 +250,6 @@ class PartTest(TestCase): barcode = self.r1.format_barcode() self.assertEqual('INV-PA3', barcode) - def test_sell_pricing(self): - """Check that the sell pricebreaks were loaded.""" - self.assertTrue(self.r1.has_price_breaks) - self.assertEqual(self.r1.price_breaks.count(), 2) - # check that the sell pricebreaks work - self.assertEqual(float(self.r1.get_price(1)), 0.15) - self.assertEqual(float(self.r1.get_price(10)), 1.0) - - def test_internal_pricing(self): - """Check that the sell pricebreaks were loaded.""" - self.assertTrue(self.r1.has_internal_price_breaks) - self.assertEqual(self.r1.internal_price_breaks.count(), 2) - # check that the sell pricebreaks work - self.assertEqual(float(self.r1.get_internal_price(1)), 0.08) - self.assertEqual(float(self.r1.get_internal_price(10)), 0.5) - def test_metadata(self): """Unit tests for the metadata field.""" for model in [Part]: diff --git a/src/backend/InvenTree/plugin/base/barcodes/mixins.py b/src/backend/InvenTree/plugin/base/barcodes/mixins.py index 9189e6f3ba..298cbaeb39 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/mixins.py +++ b/src/backend/InvenTree/plugin/base/barcodes/mixins.py @@ -389,11 +389,17 @@ class SupplierBarcodeMixin(BarcodeMixin): debug_response['no_match'] = True return debug_response + if not line_item or not line_item.part: + return {'error': _('No matching line item found'), 'no_match': False} + if line_item.part != supplier_part: - return {'error': _('Supplier part does not match line item')} + return { + 'error': _('Supplier part does not match line item'), + 'no_match': False, + } if line_item.is_completed(): - return {'error': _('Line item is already completed')} + return {'error': _('Line item is already completed'), 'no_match': False} # Extract location information for the line item location = ( diff --git a/src/backend/InvenTree/plugin/base/event/events.py b/src/backend/InvenTree/plugin/base/event/events.py index 1a77432804..c834e02ae4 100644 --- a/src/backend/InvenTree/plugin/base/event/events.py +++ b/src/backend/InvenTree/plugin/base/event/events.py @@ -1,5 +1,9 @@ """Functions for triggering and responding to server side events.""" +import contextvars +from collections import defaultdict +from contextlib import contextmanager + from django.conf import settings from django.db import transaction from django.db.models.signals import post_delete, post_save @@ -11,13 +15,79 @@ from opentelemetry import trace import InvenTree.exceptions from common.settings import get_global_setting from InvenTree.ready import canAppAccessDatabase, isImportingData -from InvenTree.tasks import offload_task +from InvenTree.tasks import bulk_offload_task, offload_task from plugin import PluginMixinEnum from plugin.registry import registry tracer = trace.get_tracer(__name__) logger = structlog.get_logger('inventree') +# Active event batch for the current context (see batch_events()), if any +_event_batch: contextvars.ContextVar = contextvars.ContextVar( + 'event_batch', default=None +) + + +class EventBatch: + """Collects trigger_event() calls made within a batch_events() scope. + + Entries are grouped by event name, so that each distinct event triggered + within the batch is flushed via its own bulk_trigger_event() call. + """ + + def __init__(self): + """Initialize an empty batch.""" + self.entries: dict[str, list] = defaultdict(list) + + def add(self, event: str, *args, **kwargs) -> None: + """Record a single trigger_event() call against this batch.""" + self.entries[event].append((args, kwargs)) + + def flush(self) -> None: + """Fire a bulk_trigger_event() call for each event name collected so far.""" + entries, self.entries = self.entries, defaultdict(list) + + for event, event_entries in entries.items(): + bulk_trigger_event(event, event_entries) + + +@contextmanager +def batch_events(): + """Batch trigger_event() calls made within this scope into bulk_trigger_event() calls. + + Any trigger_event() call made (directly, or indirectly via a nested function call) + while this context is active is queued instead of immediately offloaded. The queued + events are flushed - grouped by event name, one bulk_trigger_event() call per name - + when the current database transaction commits (or immediately, if no transaction is + active). If the transaction is instead rolled back, the queued events are discarded, + rather than being fired for a write that never happened. + + Nesting is not supported: a nested batch_events() call reuses the outer batch, and + only the outermost call schedules a flush. + + This does not change the behavior of code that triggers events *outside* of this + context - trigger_event() still fires immediately in that case. This allows existing + single-item entrypoints (e.g. StockItem.stocktake()) to be reused unmodified by both + single-item and bulk callers: bulk callers simply wrap their loop in batch_events(). + + Yields: + EventBatch: The current event batch, which can be used to add events directly. + + """ + if _event_batch.get() is not None: + # Already inside a batch - extend it, rather than creating a nested one + yield _event_batch.get() + return + + batch = EventBatch() + token = _event_batch.set(batch) + + try: + yield batch + finally: + _event_batch.reset(token) + transaction.on_commit(batch.flush) + @tracer.start_as_current_span('trigger_event') def trigger_event(event: str, *args, **kwargs) -> None: @@ -45,6 +115,11 @@ def trigger_event(event: str, *args, **kwargs) -> None: logger.debug("Ignoring triggered event '%s' - database not ready", event) return + if (batch := _event_batch.get()) is not None: + # A batch_events() context is active - queue this event rather than firing it now + batch.add(event, *args, **kwargs) + return + logger.debug("Event triggered: '%s'", event) force_async = kwargs.pop('force_async', True) @@ -58,6 +133,60 @@ def trigger_event(event: str, *args, **kwargs) -> None: offload_task(register_event, event, *args, group='plugin', **kwargs) +@tracer.start_as_current_span('bulk_trigger_event') +def bulk_trigger_event(event: str, entries: list) -> None: + """Trigger the same event multiple times, in a single bulk database write. + + Equivalent to calling trigger_event(event, *args, **kwargs) once per (args, kwargs) + pair in 'entries', but queues all of the resulting background tasks via a single + bulk_offload_task() call, rather than one INSERT per event. + + Arguments: + event: The event to trigger + entries: List of (args, kwargs) tuples, one per event instance to register + + These events will be stored in the database, and the worker will respond to them later on. + """ + if not entries: + return + + if not get_global_setting('ENABLE_PLUGINS_EVENTS', False): + # Do nothing if plugin events are not enabled + return + + # Ensure event name is stringified + event = str(event).strip() + + # Make sure the database can be accessed and is not being tested rn + if ( + not canAppAccessDatabase(allow_shell=True) + and not settings.PLUGIN_TESTING_EVENTS + ): + logger.debug("Ignoring bulk triggered event '%s' - database not ready", event) + return + + logger.debug("Bulk event triggered: '%s' (%s entries)", event, len(entries)) + + force_async = True + + # If we are running in testing mode, we can enable or disable async processing + if settings.PLUGIN_TESTING_EVENTS: + force_async = settings.PLUGIN_TESTING_EVENTS_ASYNC + + task_entries = [] + + for args, kwargs in entries: + kwargs = dict(kwargs) + # 'force_async' is a bulk_offload_task() control flag, not event data - it is + # resolved once for the whole batch above, so strip any per-entry override + kwargs.pop('force_async', None) + task_entries.append(((event, *args), kwargs)) + + bulk_offload_task( + register_event, task_entries, group='plugin', force_async=force_async + ) + + @tracer.start_as_current_span('register_event') def register_event(event, *args, **kwargs): """Register the event with any interested plugins. diff --git a/src/backend/InvenTree/plugin/base/event/test_events.py b/src/backend/InvenTree/plugin/base/event/test_events.py new file mode 100644 index 0000000000..77c5c5f998 --- /dev/null +++ b/src/backend/InvenTree/plugin/base/event/test_events.py @@ -0,0 +1,134 @@ +"""Unit tests for event triggering functions.""" + +from django.db import transaction +from django.test import TestCase + +from django_q.models import OrmQ + +from common.models import InvenTreeSetting +from plugin.base.event.events import batch_events, bulk_trigger_event, trigger_event + + +class BulkEventTriggerTests(TestCase): + """Unit tests for the bulk_trigger_event function.""" + + def test_bulk_trigger_event(self): + """Test that bulk_trigger_event queues events in a single bulk database write.""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + entries = [ + ((idx, idx + 1), {'animal': f'animal_{idx}', 'count': idx}) + for idx in range(10) + ] + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + # Start with a blank slate + OrmQ.objects.all().delete() + + # Queuing all 10 events should only take two database queries: + # one to check the 'ENABLE_PLUGINS_EVENTS' setting, and one bulk_create + with self.assertNumQueries(2): + bulk_trigger_event('test.event', entries) + + self.assertEqual(OrmQ.objects.count(), 10) + + # Read out the pending tasks, and check that the args / kwargs match + queued_tasks = OrmQ.objects.all().order_by('id') + + for task, (args, kwargs) in zip(queued_tasks, entries, strict=True): + self.assertEqual(task.func(), 'plugin.base.event.events.register_event') + self.assertEqual(task.group(), 'plugin') + self.assertEqual(task.args(), ('test.event', *args)) + self.assertEqual(task.kwargs(), kwargs) + + +class BatchEventsTests(TestCase): + """Unit tests for the batch_events() context manager.""" + + def setUp(self): + """Enable plugin events for all tests in this class.""" + super().setUp() + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + OrmQ.objects.all().delete() + + def test_events_queued_and_flushed_on_commit(self): + """Events triggered inside batch_events() are queued and flushed as one bulk write on commit.""" + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), batch_events(): + for idx in range(10): + trigger_event('test.event', id=idx, value=f'v{idx}') + + # Nothing should be queued yet - the batch only flushes on commit + self.assertEqual(OrmQ.objects.count(), 0) + + self.assertEqual(OrmQ.objects.count(), 10) + + queued_tasks = OrmQ.objects.all().order_by('id') + + for idx, task in enumerate(queued_tasks): + self.assertEqual(task.args(), ('test.event',)) + self.assertEqual(task.kwargs(), {'id': idx, 'value': f'v{idx}'}) + + def test_events_grouped_by_name(self): + """Events with different names in the same batch are flushed as separate bulk writes.""" + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), batch_events(): + for idx in range(5): + trigger_event('event.a', id=idx) + for idx in range(3): + trigger_event('event.b', id=idx) + + self.assertEqual(OrmQ.objects.count(), 8) + self.assertEqual( + sum(1 for task in OrmQ.objects.all() if task.args() == ('event.a',)), 5 + ) + self.assertEqual( + sum(1 for task in OrmQ.objects.all() if task.args() == ('event.b',)), 3 + ) + + def test_events_discarded_on_rollback(self): + """Events queued in a batch are discarded, not fired, if the transaction rolls back.""" + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + with self.captureOnCommitCallbacks(execute=True): + try: + with transaction.atomic(), batch_events(): + trigger_event('test.event', id=1) + raise ValueError('boom') + except ValueError: + pass + + self.assertEqual(OrmQ.objects.count(), 0) + + def test_events_outside_batch_fire_immediately(self): + """Events triggered outside any batch_events() context are unaffected - fired immediately.""" + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + trigger_event('test.event', id=1) + + # No transaction commit or captureOnCommitCallbacks needed - it was never queued + self.assertEqual(OrmQ.objects.count(), 1) + + def test_nested_batch_events_share_one_flush(self): + """A nested batch_events() call reuses the outer batch, rather than flushing twice.""" + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), batch_events(): + trigger_event('test.event', id=1) + with batch_events(): + trigger_event('test.event', id=2) + self.assertEqual(OrmQ.objects.count(), 0) + + self.assertEqual(OrmQ.objects.count(), 2) diff --git a/src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py b/src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py index 6503d8f571..b03642e554 100644 --- a/src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py +++ b/src/backend/InvenTree/plugin/builtin/exporter/stocktake_exporter.py @@ -49,7 +49,7 @@ class PartStocktakeExporter(DataExportMixin, InvenTreePlugin): SLUG = 'inventree-stocktake-exporter' TITLE = _('Part Stocktake Exporter') DESCRIPTION = _('Exporter for part stocktake data') - VERSION = '1.1.0' + VERSION = '1.1.1' AUTHOR = _('InvenTree contributors') ExportOptionsSerializer = PartStocktakeExportOptionsSerializer @@ -156,6 +156,9 @@ class PartStocktakeExporter(DataExportMixin, InvenTreePlugin): if exclude_zero_stock: continue + # Update the 'total in stock' count for this row + row['total_in_stock'] = float(quantity) + if export_pricing_data: pricing_min = row.get('pricing_min', None) or row.get( 'pricing_max', None diff --git a/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py b/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py index d04993bef6..b8dea2cd17 100644 --- a/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py +++ b/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py @@ -526,6 +526,75 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): self.assertIn('error', result.data) self.assertNotIn('supplier_matches', result.data) + def test_no_matching_line_item_in_po(self): + """Supplier part matches globally, but is not a line item on the resolved PO. + + Regression test: previously line_item stayed None in this case and + scan_receive_item raised an unhandled AttributeError, which was swallowed + by the calling code and surfaced as a misleading 'No plugin match' error. + """ + digikey_supplier = Company.objects.get(name='Supplier') + part = Part.objects.get(name='Test Part') + + # Supplier part matches the barcode SKU, but is not attached to purchase_order1 + SupplierPart.objects.create( + SKU='ORPHAN-SKU-NOT-ON-PO', part=part, supplier=digikey_supplier + ) + + url = reverse('api-barcode-po-receive') + result = self.post( + url, data={'barcode': DIGIKEY_BARCODE_PART_NOT_ON_PO}, expected_code=400 + ) + + self.assertEqual(result.data['error'], 'No matching line item found') + + def test_multiple_matching_line_items_in_po(self): + """Same supplier part appears on two line items of the same PO. + + line_item auto-detection requires a *unique* match; with two line items + referencing the same supplier part, it should fail cleanly instead of crashing. + """ + supplier_part = SupplierPart.objects.get(SKU='296-LM358BIDDFRCT-ND') + + # Add a second, separate line item for the same supplier part + self.purchase_order1.add_line_item( + supplier_part, 4, group=False, destination=self.loc_2 + ) + + url = reverse('api-barcode-po-receive') + result = self.post(url, data={'barcode': DIGIKEY_BARCODE}, expected_code=400) + + self.assertEqual(result.data['error'], 'No matching line item found') + + def test_explicit_line_item_missing_supplier_part(self): + """Explicitly-provided line item whose supplier part has been deleted. + + SupplierPart.part uses on_delete=SET_NULL, so a line item can end up with + part=None if its supplier part is deleted after the line item was created. + """ + digikey_supplier = Company.objects.get(name='Supplier') + part = Part.objects.get(name='Test Part') + + orphan_supplier_part = SupplierPart.objects.create( + SKU='TO-BE-DELETED', part=part, supplier=digikey_supplier + ) + line_item = self.purchase_order1.add_line_item( + orphan_supplier_part, 2, destination=self.loc_2 + ) + + orphan_supplier_part.delete() + line_item.refresh_from_db() + self.assertIsNone(line_item.part) + + url = reverse('api-barcode-po-receive') + result = self.post( + url, + data={'barcode': DIGIKEY_BARCODE, 'line_item': line_item.pk}, + expected_code=400, + ) + + self.assertEqual(result.data['error'], 'No matching line item found') + DIGIKEY_BARCODE = ( '[)>\x1e06\x1dP296-LM358BIDDFRCT-ND\x1d1PLM358BIDDFR\x1dK\x1d1K72991337\x1d' @@ -588,3 +657,11 @@ DIGIKEY_BARCODE_PART_NO_PO = ( '[)>\x1e06\x1dP296-LM358BIDDFRCT-ND\x1d1PLM358BIDDFR\x1dK\x1d1KBADORDER-XXXXX\x1d' '10K85781337\x1d11K1\x1d4LPH\x1dQ10\x1d11ZPICK' ) + +# DigiKey barcode: '1K72991337' matches purchase_order1 via supplier_reference, +# and 'PORPHAN-SKU-NOT-ON-PO' matches a real supplier part in the test database, +# but that supplier part is not attached to any line item of purchase_order1. +DIGIKEY_BARCODE_PART_NOT_ON_PO = ( + '[)>\x1e06\x1dPORPHAN-SKU-NOT-ON-PO\x1d1PORPHAN-MPN\x1dK\x1d1K72991337\x1d' + '10K85781337\x1d11K1\x1d4LPH\x1dQ10\x1d11ZPICK' +) diff --git a/src/backend/InvenTree/plugin/events.py b/src/backend/InvenTree/plugin/events.py index c4f9d8006b..2097767440 100644 --- a/src/backend/InvenTree/plugin/events.py +++ b/src/backend/InvenTree/plugin/events.py @@ -1,7 +1,12 @@ """Import helper for events.""" from generic.events import BaseEventEnum -from plugin.base.event.events import process_event, register_event, trigger_event +from plugin.base.event.events import ( + bulk_trigger_event, + process_event, + register_event, + trigger_event, +) class PluginEvents(BaseEventEnum): @@ -11,4 +16,10 @@ class PluginEvents(BaseEventEnum): PLUGIN_ACTIVATED = 'plugin_activated' -__all__ = ['PluginEvents', 'process_event', 'register_event', 'trigger_event'] +__all__ = [ + 'PluginEvents', + 'bulk_trigger_event', + 'process_event', + 'register_event', + 'trigger_event', +] diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index 4cac88f05b..61b0d62607 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -677,6 +677,11 @@ class PluginsRegistry: if plg_key in configs: plg_db = configs[plg_key] + + # Handle edge case where PluginConfig has been created without a valid name + if plg_name and plg_db and plg_db.name != plg_name: + plg_db.name = plg_name + plg_db.save() else: plg_db = self.get_plugin_config(plg_key, plg_name) diff --git a/src/backend/InvenTree/stock/api.py b/src/backend/InvenTree/stock/api.py index dcefb7287b..77f7f05a4b 100644 --- a/src/backend/InvenTree/stock/api.py +++ b/src/backend/InvenTree/stock/api.py @@ -173,6 +173,36 @@ class StockItemConvert(StockItemContextMixin, CreateAPI): serializer_class = StockSerializers.ConvertStockItemSerializer +@extend_schema(responses={201: StockSerializers.StockItemSerializer(many=True)}) +class StockItemDisassemble(StockItemContextMixin, CreateAPI): + """API endpoint for disassembling a stock item into its component parts. + + The components are generated based on the BOM lines provided in the request, + which must be valid BOM lines for the part associated with the stock item. + """ + + serializer_class = StockSerializers.DisassembleStockItemSerializer + pagination_class = None + + def create(self, request, *args, **kwargs): + """Disassemble the provided StockItem.""" + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + # Perform the actual disassembly step + items = serializer.save() + + queryset = StockSerializers.StockItemSerializer.annotate_queryset( + StockItem.objects.filter(pk__in=[item.pk for item in items]) + ) + + response = StockSerializers.StockItemSerializer( + queryset, many=True, context=self.get_serializer_context() + ) + + return Response(response.data, status=status.HTTP_201_CREATED) + + class StockAdjustView(CreateAPI): """A generic class for handling stocktake actions. @@ -552,6 +582,7 @@ class StockFilter(FilterSet): # Simple filter filters fields = [ 'supplier_part', + 'parent', 'belongs_to', 'build', 'customer', @@ -880,15 +911,6 @@ class StockFilter(FilterSet): return queryset.exclude(purchase_price=None) return queryset.filter(purchase_price=None) - ancestor = rest_filters.ModelChoiceFilter( - label='Ancestor', queryset=StockItem.objects.all(), method='filter_ancestor' - ) - - @extend_schema_field(OpenApiTypes.INT) - def filter_ancestor(self, queryset, name, ancestor): - """Filter based on ancestor stock item.""" - return queryset.filter(parent__in=ancestor.get_descendants(include_self=True)) - category = rest_filters.ModelChoiceFilter( label=_('Category'), queryset=PartCategory.objects.all(), @@ -997,26 +1019,6 @@ class StockFilter(FilterSet): else: return queryset.exclude(stale_filter) - exclude_tree = rest_filters.NumberFilter( - method='filter_exclude_tree', - label=_('Exclude Tree'), - help_text=_( - 'Provide a StockItem PK to exclude that item and all its descendants' - ), - ) - - def filter_exclude_tree(self, queryset, name, value): - """Exclude a StockItem and all of its descendants from the queryset.""" - try: - root = StockItem.objects.get(pk=value) - pks_to_exclude = [ - item.pk for item in root.get_descendants(include_self=True) - ] - return queryset.exclude(pk__in=pks_to_exclude) - except (ValueError, StockItem.DoesNotExist): - # If the value is invalid or the object doesn't exist, do nothing. - return queryset - cascade = rest_filters.BooleanFilter( method='filter_cascade', label=_('Cascade Locations'), @@ -1794,6 +1796,11 @@ stock_api_urls = [ '/', include([ path('convert/', StockItemConvert.as_view(), name='api-stock-item-convert'), + path( + 'disassemble/', + StockItemDisassemble.as_view(), + name='api-stock-item-disassemble', + ), path('install/', StockItemInstall.as_view(), name='api-stock-item-install'), meta_path(StockItem), path( diff --git a/src/backend/InvenTree/stock/events.py b/src/backend/InvenTree/stock/events.py index 6f6efb2f62..a3eb81c811 100644 --- a/src/backend/InvenTree/stock/events.py +++ b/src/backend/InvenTree/stock/events.py @@ -15,5 +15,6 @@ class StockEvents(BaseEventEnum): ITEM_COUNTED = 'stockitem.counted' ITEM_QUANTITY_UPDATED = 'stockitem.quantityupdated' ITEM_INSTALLED_INTO_ASSEMBLY = 'stockitem.installed' + ITEM_DISASSEMBLED = 'stockitem.disassembled' ITEMS_CREATED = 'stockitem.created_items' diff --git a/src/backend/InvenTree/stock/fixtures/stock.yaml b/src/backend/InvenTree/stock/fixtures/stock.yaml index 8fd9fd97c0..6181ccaf1c 100644 --- a/src/backend/InvenTree/stock/fixtures/stock.yaml +++ b/src/backend/InvenTree/stock/fixtures/stock.yaml @@ -10,10 +10,6 @@ quantity: 4000 purchase_price: 123 purchase_price_currency: AUD - tree_id: 20 - level: 0 - lft: 1 - rght: 2 # 5,000 screws in the bathroom - model: stock.stockitem @@ -22,10 +18,6 @@ part: 1 location: 2 quantity: 5000 - tree_id: 21 - level: 0 - lft: 1 - rght: 2 # Capacitor C_22N_0805 in 'Office' - model: stock.stockitem @@ -34,10 +26,6 @@ part: 5 location: 4 quantity: 666 - tree_id: 16 - level: 0 - lft: 1 - rght: 2 # 1234 2K2 resistors in 'Drawer_1' - model: stock.stockitem @@ -46,10 +34,6 @@ part: 3 location: 5 quantity: 1234 - tree_id: 22 - level: 0 - lft: 1 - rght: 2 # Some widgets in drawer 3 - model: stock.stockitem @@ -60,10 +44,6 @@ location: 7 quantity: 10 delete_on_deplete: False - tree_id: 28 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 101 @@ -72,10 +52,6 @@ batch: "B2345" location: 7 quantity: 5 - tree_id: 27 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 102 @@ -84,10 +60,6 @@ batch: 'BCDE' location: 7 quantity: 0 - tree_id: 26 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 105 @@ -97,10 +69,6 @@ quantity: 1 serial: 1000 serial_int: 1000 - tree_id: 29 - level: 0 - lft: 1 - rght: 2 # Stock items for template / variant parts - model: stock.stockitem @@ -110,10 +78,6 @@ location: 7 quantity: 5 batch: "BBAAA" - tree_id: 2 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 501 @@ -123,10 +87,6 @@ quantity: 1 serial: 1 serial_int: 1 - tree_id: 3 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 502 @@ -136,10 +96,6 @@ quantity: 1 serial: 2 serial_int: 2 - tree_id: 4 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 503 @@ -149,10 +105,6 @@ quantity: 1 serial: 3 serial_int: 3 - tree_id: 5 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 504 @@ -162,10 +114,6 @@ quantity: 1 serial: 4 serial_int: 4 - tree_id: 6 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 505 @@ -175,10 +123,6 @@ quantity: 1 serial: 5 serial_int: 5 - tree_id: 1 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 510 @@ -188,10 +132,6 @@ quantity: 1 serial: 10 serial_int: 10 - tree_id: 24 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 511 @@ -201,10 +141,6 @@ quantity: 1 serial: 11 serial_int: 11 - tree_id: 23 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 512 @@ -214,10 +150,6 @@ quantity: 1 serial: 12 serial_int: 12 - tree_id: 25 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 520 @@ -229,10 +161,6 @@ serial_int: 20 expiry_date: "1990-10-10" barcode_hash: 9e5ae7fc20568ed4814c10967bba8b65 - tree_id: 18 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 521 @@ -244,10 +172,6 @@ serial_int: 21 status: 60 barcode_hash: 1be0dfa925825c5c6c79301449e50c2d - tree_id: 17 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 522 @@ -259,10 +183,6 @@ serial_int: 22 expiry_date: "1990-10-10" status: 70 - tree_id: 19 - level: 0 - lft: 1 - rght: 2 belongs_to: 105 # Multiple stock items for "Bob" (PK 100) @@ -272,10 +192,6 @@ part: 100 location: 1 quantity: 10 - tree_id: 9 - level: 0 - lft: 1 - rght: 4 - model: stock.stockitem pk: 1001 @@ -284,10 +200,6 @@ parent: 1000 location: 1 quantity: 11 - tree_id: 9 - level: 1 - lft: 2 - rght: 3 - model: stock.stockitem pk: 1002 @@ -295,10 +207,6 @@ part: 100 location: 1 quantity: 12 - tree_id: 8 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 1003 @@ -306,10 +214,6 @@ part: 100 location: 1 quantity: 13 - tree_id: 15 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 1004 @@ -317,10 +221,6 @@ part: 100 location: 1 quantity: 14 - tree_id: 7 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 1005 @@ -328,10 +228,6 @@ part: 100 location: 1 quantity: 15 - tree_id: 13 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 1006 @@ -339,10 +235,6 @@ part: 100 location: 1 quantity: 16 - tree_id: 12 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 1007 @@ -350,10 +242,6 @@ part: 100 location: 7 quantity: 17 - tree_id: 11 - level: 0 - lft: 1 - rght: 2 - model: stock.stockitem pk: 1008 @@ -361,7 +249,3 @@ part: 100 location: 7 quantity: 18 - tree_id: 10 - level: 0 - lft: 1 - rght: 2 diff --git a/src/backend/InvenTree/stock/migrations/0124_alter_mptt_fields.py b/src/backend/InvenTree/stock/migrations/0124_alter_mptt_fields.py new file mode 100644 index 0000000000..5b29e1a58c --- /dev/null +++ b/src/backend/InvenTree/stock/migrations/0124_alter_mptt_fields.py @@ -0,0 +1,34 @@ +# Generated by Django 5.2.15 on 2026-07-11 03:34 + +from django.db import migrations, models + + + +class Migration(migrations.Migration): + + dependencies = [ + ("stock", "0123_remove_stockitem_review_needed"), + ] + + operations = [ + migrations.AlterField( + model_name="stockitem", + name="level", + field=models.PositiveIntegerField(default=0), + ), + migrations.AlterField( + model_name="stockitem", + name="lft", + field=models.PositiveIntegerField(default=0), + ), + migrations.AlterField( + model_name="stockitem", + name="rght", + field=models.PositiveIntegerField(default=0), + ), + migrations.AlterField( + model_name="stockitem", + name="tree_id", + field=models.PositiveIntegerField(db_index=True, default=0), + ), + ] diff --git a/src/backend/InvenTree/stock/migrations/0125_remove_mptt_fields.py b/src/backend/InvenTree/stock/migrations/0125_remove_mptt_fields.py new file mode 100644 index 0000000000..fdb3559da9 --- /dev/null +++ b/src/backend/InvenTree/stock/migrations/0125_remove_mptt_fields.py @@ -0,0 +1,41 @@ +# Generated by Django 5.2.15 on 2026-07-11 03:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("stock", "0124_alter_mptt_fields"), + ] + + operations = [ + migrations.RemoveField( + model_name="stockitem", + name="level", + ), + migrations.RemoveField( + model_name="stockitem", + name="lft", + ), + migrations.RemoveField( + model_name="stockitem", + name="rght", + ), + migrations.RemoveField( + model_name="stockitem", + name="tree_id", + ), + migrations.AlterField( + model_name="stockitem", + name="parent", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=models.deletion.SET_NULL, + related_name="children", + to="stock.stockitem", + verbose_name="Parent Stock Item", + ), + ), + ] diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index eb9a276838..137f6e79d2 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -2,7 +2,9 @@ from __future__ import annotations +import contextvars import os +from contextlib import contextmanager from datetime import timedelta from decimal import Decimal, InvalidOperation @@ -33,7 +35,6 @@ import InvenTree.ready import InvenTree.tasks import order.models import report.mixins -import stock.tasks from common.icons import validate_icon from common.settings import get_global_setting from company import models as CompanyModels @@ -41,6 +42,7 @@ from generic.enums import StringEnum from generic.states import StatusCodeMixin from generic.states.fields import InvenTreeCustomStatusModelField from InvenTree.fields import InvenTreeModelMoneyField, InvenTreeURLField +from InvenTree.helpers_db import bulk_create_and_fetch from InvenTree.status_codes import ( SalesOrderStatusGroups, StockHistoryCode, @@ -420,7 +422,6 @@ STOCK_SORT_DEFAULT = StockSortOrder.DATE_OLDEST class StockItem( - InvenTree.models.PluginValidationMixin, InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNoteMixin, @@ -429,7 +430,7 @@ class StockItem( report.mixins.InvenTreeReportMixin, common.models.MetaMixin, InvenTree.models.MetadataMixin, - InvenTree.models.InvenTreeTree, + InvenTree.models.InvenTreeModel, ): """A StockItem object represents a quantity of physical instances of a part. @@ -549,6 +550,9 @@ class StockItem( def delete(self, ignore_serial_check: bool = False, **kwargs): """Custom delete method for StockItem model. + Any child items are re-linked to the parent of this item, + to preserve the stock item genealogy chain. + Arguments: ignore_serial_check: If True, allow deletion of serialized stock items regardless of global setting """ @@ -558,22 +562,32 @@ class StockItem( if self.serialized: raise ValidationError(_('Serialized stock items cannot be deleted')) - super().delete(**kwargs) + with transaction.atomic(): + # Re-link any child items to the parent of this item, + # so the genealogy chain survives deletion of an intermediate item + + parent = StockItem.objects.filter(pk=self.parent_id).first() + StockItem.objects.filter(parent=self).update(parent=parent) + + super().delete(**kwargs) @staticmethod def get_api_url(): """Return API url.""" return reverse('api-stock-list') - def api_instance_filters(self): - """Custom API instance filters.""" - return {'parent': {'exclude_tree': self.pk}} - @classmethod def barcode_model_type_code(cls): """Return the associated barcode model type code for this model.""" return 'SI' + def get_children(self): + """Return a queryset of all StockItem objects which are direct children of this StockItem. + + Simply proxies the reverse foreign-key relation for the 'parent' field. + """ + return self.children.all() + def get_test_keys(self, include_installed=True): """Construct a flattened list of test 'keys' for this StockItem.""" keys = [] @@ -706,20 +720,9 @@ class StockItem( if 'part' not in data: raise ValidationError({'part': _('Part must be specified')}) - part = data['part'] - parent = kwargs.pop('parent', None) or data.get('parent') - tree_id = kwargs.pop('tree_id', StockItem.getNextTreeID()) - if parent: - # Override with parent's tree_id if provided - tree_id = parent.tree_id - - # Pre-calculate MPTT fields - data['parent'] = parent if parent else None - data['level'] = parent.level + 1 if parent else 0 - data['lft'] = 0 if parent else 1 - data['rght'] = 0 if parent else 2 + data['parent'] = parent # Force single quantity for each item data['quantity'] = 1 @@ -732,29 +735,11 @@ class StockItem( else: data['serial_int'] = 0 - data['tree_id'] = tree_id - - if not parent: - # No parent, this is a top-level item, so increment the tree_id - # This is because each new item is a "top-level" node in the StockItem tree - tree_id += 1 - # Construct a new StockItem from the provided dict items.append(StockItem(**data)) # Create the StockItem objects in bulk - StockItem.objects.bulk_create(items, batch_size=250) - - # We will need to rebuild the stock item tree manually, due to the bulk_create operation - if parent and parent.tree_id: - # Rebuild the tree structure for this StockItem tree - logger.info( - 'Rebuilding StockItem tree structure for tree_id: %s', parent.tree_id - ) - stock.tasks.rebuild_stock_item_tree(parent.tree_id) - - # Fetch the new StockItem objects from the database - items = StockItem.objects.filter(part=part, serial__in=serials) + items = bulk_create_and_fetch(StockItem, items) # Trigger a 'created' event for the new items # Note that instead of a single event for each item, @@ -1061,11 +1046,11 @@ class StockItem( """Returns part name.""" return self.part.full_name - # Note: When a StockItem is deleted, a pre_delete signal handles the parent/child relationship - parent = TreeForeignKey( - 'self', + # Note: When a StockItem is deleted, child items are re-linked to its parent (see delete()) + parent = models.ForeignKey( + 'stock.StockItem', verbose_name=_('Parent Stock Item'), - on_delete=models.DO_NOTHING, + on_delete=models.SET_NULL, blank=True, null=True, related_name='children', @@ -1385,6 +1370,7 @@ class StockItem( # Delete outstanding BuildOrder allocations self.allocations.all().delete() + @transaction.atomic def allocateToCustomer( self, customer, quantity=None, order=None, user=None, notes=None ): @@ -1401,9 +1387,20 @@ class StockItem( user: User that performed the action notes: Notes field """ - if quantity is None: + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + raise ValidationError(_('Stock item no longer exists')) + + if quantity is None or self.serialized: quantity = self.quantity + # Cannot allocate more than the available quantity + # (also ensures the recorded history matches the actual allocation) + quantity = min(quantity, self.quantity) + + if quantity <= 0: + raise ValidationError({'quantity': _('Quantity must be greater than zero')}) + if quantity >= self.quantity: item = self else: @@ -1733,6 +1730,22 @@ class StockItem( notes: Any notes associated with the operation build: The BuildOrder to associate with the operation (optional) """ + # Lock the database row, so concurrent adjustments are serialized + if not other_item.lock_quantity(): + raise ValidationError(_('Stock item no longer exists')) + + try: + quantity = Decimal(quantity) + except (InvalidOperation, TypeError): + raise ValidationError({'quantity': _('Invalid quantity value')}) + + if quantity <= 0: + raise ValidationError({'quantity': _('Quantity must be greater than zero')}) + + # Cannot install more than the available quantity + # (also ensures the recorded history matches the actual installation) + quantity = min(quantity, other_item.quantity) + # If the quantity is less than the stock item, split the stock! stock_item = other_item.splitStock(quantity, None, user) @@ -1785,6 +1798,11 @@ class StockItem( if self.belongs_to is None: return False + if location and location.structural: + raise ValidationError({ + 'location': _('Cannot assign stock to structural location') + }) + # Add a transaction note to the parent item self.belongs_to.add_tracking_entry( StockHistoryCode.REMOVED_CHILD_ITEM, @@ -1813,10 +1831,275 @@ class StockItem( self.save() - @property - def children(self): - """Return a list of the child items which have been split from this stock item.""" - return self.get_descendants(include_self=False) + def allocate_disassembly_pricing(self, quantity, lines: list) -> list: + """Allocate the purchase price of this stock item across disassembly lines. + + Automatic cost allocation is only performed if: + - This stock item has a recorded purchase price + - None of the provided lines specify an explicit purchase price + + The total cost is apportioned across the lines pro-rata, + weighted by existing pricing data for each component part. + If pricing data is not available for *every* line, + the cost is split evenly across the generated units. + + Args: + quantity: The number of units of this stock item being disassembled + lines: A list of dict objects (see the disassemble method) + + Returns: + The list of lines, with 'purchase_price' values filled in where possible + """ + if not self.purchase_price: + return lines + + if any(line.get('purchase_price') is not None for line in lines): + # Explicit pricing has been provided - do not override + return lines + + # Calculate a relative pricing "weight" for each line + weights = [] + + for line in lines: + pricing = line['bom_item'].sub_part.pricing + + price_range = [ + price + for price in [pricing.overall_min, pricing.overall_max] + if price is not None + ] + + weight = None + + if price_range: + mid = sum(price_range[1:], price_range[0]) / len(price_range) + + if mid.amount > 0: + weight = Decimal(mid.amount) * Decimal(line['quantity']) + + weights.append(weight) + + if any(weight is None for weight in weights): + # Insufficient pricing data - fall back to an even (per unit) split + weights = [Decimal(line['quantity']) for line in lines] + + total_weight = sum(weights) + + if total_weight <= 0: + return lines + + # Total cost of the disassembled units + total_cost = self.purchase_price * quantity + + for line, weight in zip(lines, weights, strict=True): + line_quantity = Decimal(line['quantity']) + + if line_quantity > 0: + if weight is None: + # Fallback to an even split + line['purchase_price'] = total_cost / len(lines) / line_quantity + else: + line['purchase_price'] = ( + total_cost * (weight / total_weight) / line_quantity + ) + + return lines + + @transaction.atomic + def disassemble( + self, quantity, lines: list, user, location=None, notes: str = '' + ) -> list[StockItem]: + """Disassemble this stock item into its component parts. + + The provided BOM lines determine which component parts are "broken out" + of this stock item. A new stock item is created for each line, + and the quantity of this item is reduced accordingly. + + Args: + quantity: The number of units of this stock item to disassemble + lines: A list of dict objects, each containing: + bom_item: The BomItem instance defining the component to break out + quantity: The total quantity of the component to create + location: Optional destination StockLocation for the component + status: Optional StockStatus code for the component (default: OK) + purchase_price: Optional unit purchase price for the component + user: The user performing the operation + location: Default destination location for the generated components + notes: Optional transaction notes + + Returns: + A list of the component StockItem objects (created or uninstalled) + + Note: + This stock item is *retained* (with reduced quantity) even if the + quantity reaches zero, to preserve traceability of the disassembly. + + Note: + Any stock items which are *installed* within this stock item are + broken out (uninstalled) as part of the disassembly operation, + rather than creating new stock items for them. + + Note: + Traceability data is passed down from this stock item to the + generated components: the batch code and source purchase order + are copied across, while any source build order is recorded + in the stock tracking history of each component. + """ + try: + quantity = Decimal(quantity) + except (InvalidOperation, ValueError): + raise ValidationError({'quantity': _('Invalid quantity provided')}) + + if quantity <= 0: + raise ValidationError({'quantity': _('Quantity must be greater than zero')}) + + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + raise ValidationError(_('Stock item no longer exists')) + + if quantity > self.quantity: + raise ValidationError({ + 'quantity': _('Quantity must not exceed available stock quantity') + }) + + if self.serialized and quantity != self.quantity: + raise ValidationError({ + 'quantity': _( + 'Serialized stock item must be disassembled in its entirety' + ) + }) + + if len(lines) == 0: + raise ValidationError(_('No BOM lines provided')) + + # Any items installed within this stock item *must* be broken out, + # which requires that the entire quantity is disassembled + installed_items = list(self.installed_parts.all()) + + if len(installed_items) > 0 and quantity != self.quantity: + raise ValidationError({ + 'quantity': _( + 'Stock item with installed items must be disassembled in its entirety' + ) + }) + + # Cache the custom status options for the StockItem model + custom_status_values = StockItem.STATUS_CLASS.custom_values() + + items = [] + + # Match installed items against the provided BOM lines, + # so that the correct location and status values can be applied + line_map = {} + + for line in lines: + for part in line['bom_item'].get_valid_parts_for_allocation(): + line_map.setdefault(part.pk, line) + + for installed_item in installed_items: + line = line_map.get(installed_item.part.pk) + + destination = ( + (line.get('location') if line else None) or location or self.location + ) + + if line: + # The uninstalled quantity reduces the quantity of new items + # to be created against the matching BOM line + line['quantity'] = max( + Decimal(0), Decimal(line['quantity']) - installed_item.quantity + ) + + if status := line.get('status'): + installed_item.set_status( + status, custom_values=custom_status_values + ) + + # Break the installed item out into the destination location + # Note: this also saves any status change applied above + installed_item.uninstall_into_location(destination, user, notes) + + items.append(installed_item) + + # Allocate pricing data across the generated components. + # Note: Deliberately performed *after* the installed items are uninstalled, + # so that the cost is only spread across newly created stock items + lines = self.allocate_disassembly_pricing(quantity, lines) + + for line in lines: + bom_item = line['bom_item'] + line_quantity = Decimal(line['quantity']) + + if line_quantity <= 0: + continue + + destination = line.get('location') or location or self.location + + new_item = StockItem( + part=bom_item.sub_part, + quantity=line_quantity, + location=destination, + parent=self, + batch=self.batch, + purchase_order=self.purchase_order, + purchase_price=line.get('purchase_price', None), + ) + + if status := line.get('status'): + new_item.set_status(status, custom_values=custom_status_values) + + # Ensure the tree structure is observed + new_item.save(add_note=False) + + deltas = {'stockitem': self.pk, 'quantity': float(line_quantity)} + + # Record traceability links against the disassembled assembly + if self.build: + deltas['buildorder'] = self.build.pk + + if self.purchase_order: + deltas['purchaseorder'] = self.purchase_order.pk + + new_item.add_tracking_entry( + StockHistoryCode.CREATED_FROM_DISASSEMBLY, + user, + notes=notes, + deltas=deltas, + location=destination, + ) + + items.append(new_item) + + # Consume this stock item. + # Note: the item is deliberately retained (not deleted) at zero quantity, + # to preserve the disassembly history + if self.serialized: + # A serialized item cannot be reduced to zero quantity, + # so instead it is marked as "destroyed" + deltas = { + 'removed': float(quantity), + 'status': StockStatus.DESTROYED.value, + 'old_status': self.status, + } + + self.set_status(StockStatus.DESTROYED.value) + else: + deltas = { + 'removed': float(quantity), + 'quantity': float(self.quantity - quantity), + } + + self.quantity = self.quantity - quantity + + self.save(add_note=False) + + self.add_tracking_entry( + StockHistoryCode.DISASSEMBLED, user, notes=notes, deltas=deltas + ) + + trigger_event(StockEvents.ITEM_DISASSEMBLED, id=self.pk) + + return items @property def child_count(self): @@ -1921,11 +2204,8 @@ class StockItem( ): return None - # Has a location been specified? - location = kwargs.get('location') - - if location: - deltas['location'] = location.id + # Extract any additional information from the kwargs + self._apply_model_reference_fields(kwargs, deltas) # Quantity specified? quantity = kwargs.get('quantity') @@ -1933,8 +2213,11 @@ class StockItem( if quantity: deltas['quantity'] = float(quantity) + # If this item has already been deleted (e.g. depleted via delete_on_deplete), + # self.pk is None - Django refuses to save a FK pointing at an unsaved instance, + # even for a nullable/SET_NULL field, so pass None explicitly instead of self. entry = StockItemTracking( - item=self, + item=self if self.pk else None, part=self.part, tracking_type=entry_type.value, user=user, @@ -1944,7 +2227,11 @@ class StockItem( ) if commit: - entry.save() + if (batch := _tracking_batch.get()) is not None: + # A batch_tracking_entries() context is active - queue rather than save now + batch.add(entry) + else: + entry.save() return entry @@ -1989,6 +2276,10 @@ class StockItem( if quantity <= 0: raise ValidationError({'quantity': _('Quantity must be greater than zero')}) + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + raise ValidationError(_('Stock item no longer exists')) + if quantity > self.quantity: raise ValidationError({ 'quantity': _( @@ -2028,7 +2319,6 @@ class StockItem( # Set the parent ID correctly data['parent'] = self - data['tree_id'] = self.tree_id # Generate a new serial number for each item items = StockItem._create_serial_numbers(serials, **data) @@ -2211,6 +2501,11 @@ class StockItem( if location is None: return None + # This item must itself be in a state which allows merging + # (e.g. not serialized, in production, installed, or assigned to an order / customer) + if not self.can_merge(): + return None + candidates = list( StockItem.objects .filter(part=self.part, location=location) @@ -2251,8 +2546,28 @@ class StockItem( if len(other_items) == 0: return - # Keep track of the tree IDs that are being merged - tree_ids = {self.tree_id} + # Lock all database rows (in pk order, to avoid deadlocks between + # concurrent merges) and refresh the quantity of each item + items_to_merge = sorted([self, *other_items], key=lambda item: item.pk) + + locked_quantities = dict( + StockItem.objects + .select_for_update() + .filter(pk__in=[item.pk for item in items_to_merge]) + .values_list('pk', 'quantity') + ) + + for item in items_to_merge: + if item.pk not in locked_quantities: + if raise_error: + raise ValidationError(_('Stock item no longer exists')) + + logger.warning( + 'Stock item <%s> no longer exists - merge cancelled', item.pk + ) + return + + item.quantity = locked_quantities[item.pk] user = kwargs.get('user') location = kwargs.get('location', self.location) @@ -2267,18 +2582,20 @@ class StockItem( pricing_data.append([self.purchase_price, self.quantity]) for other in other_items: - # If the stock item cannot be merged, return - if not self.can_merge(other, raise_error=raise_error, **kwargs): + # Check the merge in both directions, so that the generic state checks + # (serialized, in production, installed, assigned to an order / customer) + # are applied to the incoming items as well as this one + if not self.can_merge( + other, raise_error=raise_error, **kwargs + ) or not other.can_merge(self, raise_error=raise_error, **kwargs): logger.warning( - 'Stock item <%s> could not be merge into <%s>', other.pk, self.pk + 'Stock item <%s> could not be merged into <%s>', other.pk, self.pk ) return merged_quantity = Decimal(0) for other in other_items: - tree_ids.add(other.tree_id) - merged_quantity += other.quantity self.quantity += other.quantity @@ -2310,11 +2627,10 @@ class StockItem( 'added': float(merged_quantity), } - if location: - tracking_deltas['location'] = location.pk + self._apply_model_reference_fields(kwargs, tracking_deltas) if transfer_deltas: - tracking_deltas = {**transfer_deltas, **tracking_deltas} + tracking_deltas.update(transfer_deltas) self.add_tracking_entry( StockHistoryCode.MERGED_STOCK_ITEMS, @@ -2351,19 +2667,6 @@ class StockItem( self.save() - # Rebuild stock trees as required - rebuild_result = True - for tree_id in tree_ids: - if not stock.tasks.rebuild_stock_item_tree(tree_id, rebuild_on_fail=False): - rebuild_result = False - - if not rebuild_result: - # If the rebuild failed, offload the task to a background worker - logger.warning( - 'Failed to rebuild stock item tree during merge_stock_items operation, offloading task.' - ) - InvenTree.tasks.offload_task(stock.tasks.rebuild_stock_items, group='stock') - @transaction.atomic def splitStock(self, quantity, location=None, user=None, **kwargs): """Split this stock item into two items, in the same location. @@ -2384,9 +2687,11 @@ class StockItem( allow_production: If True, allow splitting of stock which is in production (default = False) record_tracking: If False, skip tracking entries (for merge-on-transfer) split_transfer_deltas: Optional dict to receive split tracking deltas + copy_test_results: If True, copy test results from this item to the new one (default = True) Returns: - The new StockItem object + The new StockItem object, or None if no split occurred (e.g. invalid + quantity, or this item is serialized) Raises: ValidationError: If the stock item cannot be split @@ -2394,6 +2699,10 @@ class StockItem( - The provided quantity will be subtracted from this item and given to the new one. - The new item will have a different StockItem ID, while this will remain the same. """ + # Do not split a serialized part + if self.serialized: + return None + # Run initial checks to test if the stock item can actually be "split" allow_production = kwargs.get('allow_production', False) record_tracking = kwargs.pop('record_tracking', True) @@ -2403,70 +2712,48 @@ class StockItem( if self.is_building and not allow_production: raise ValidationError(_('Stock item is currently in production')) - notes = kwargs.get('notes', '') - - # Do not split a serialized part - if self.serialized: - return self - try: + # Exit early if the provided quantity is invalid quantity = Decimal(quantity) except (InvalidOperation, ValueError): - return self + logger.error( + 'StockItem<%s>.split_stock - invalid quantity (%s)', self.pk, quantity + ) + InvenTree.exceptions.log_error('StockItem.split_stock') + return None # Doesn't make sense for a zero quantity if quantity <= 0: - return self + return None + + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + return None # Also doesn't make sense to split the full amount if quantity >= self.quantity: - return self + return None # Create a new StockItem object, duplicating relevant fields # Nullify the PK so a new record is created new_stock = StockItem.objects.get(pk=self.pk) new_stock.pk = None new_stock.quantity = quantity + new_stock.location = location or self.location # Update the new stock item to ensure the tree structure is observed new_stock.parent = self - new_stock.tree_id = None - - # Move to the new location if specified, otherwise use current location - if location: - new_stock.location = location - else: - new_stock.location = self.location + # Create 'deltas' dict to record changes for tracking deltas = {'stockitem': self.pk} - transferorder = kwargs.pop('transferorder', None) - if transferorder: - deltas['transferorder'] = transferorder.pk + new_stock._apply_model_reference_fields(kwargs, deltas) + + status = new_stock._resolve_status_kwarg(kwargs) + new_stock._apply_status_change(status, deltas) # Optional fields which can be supplied in a 'move' call - for field in StockItem.optional_transfer_fields(): - if field in kwargs: - # handle specific case for status deltas - if field == 'status': - status = kwargs[field] - if not new_stock.compare_status(status): - old_custom_status = new_stock.get_custom_status() - old_status_logical = new_stock.status - new_stock.set_status(status) - deltas['status'] = status # may be a custom value - deltas['status_logical'] = ( - new_stock.status - ) # always the logical value - deltas['old_status'] = ( - old_custom_status - if old_custom_status - else old_status_logical - ) - deltas['old_status_logical'] = old_status_logical - else: - setattr(new_stock, field, kwargs[field]) - deltas[field] = kwargs[field] + new_stock._apply_optional_transfer_fields(kwargs, deltas) new_stock.save(add_note=False) @@ -2483,28 +2770,26 @@ class StockItem( StockHistoryCode.SPLIT_FROM_PARENT, user, quantity=quantity, - notes=notes, + notes=kwargs.get('notes', ''), location=location, deltas=deltas, ) # Copy the test results of this part to the new one - new_stock.copyTestResultsFrom(self) + if kwargs.get('copy_test_results', True): + new_stock.copyTestResultsFrom(self) # Remove the specified quantity from THIS stock item self.take_stock( quantity, user, code=StockHistoryCode.SPLIT_CHILD_ITEM, - notes=notes, + notes=kwargs.get('notes', ''), location=location, stockitem=new_stock, record_tracking=record_tracking, ) - # Rebuild the tree for this parent item - stock.tasks.rebuild_stock_item_tree(self.tree_id) - # Attempt to reload the new item from the database try: new_stock.refresh_from_db() @@ -2521,6 +2806,75 @@ class StockItem( """Returns a list of optional fields for a stock transfer.""" return ['batch', 'status', 'packaging'] + @classmethod + def model_reference_fields(cls): + """Returns a list of optional 'reference' fields for a stock adjustment. + + If present, the referenced model is recorded (by pk) in the tracking deltas, + linking the resulting tracking entry back to the order which triggered it. + """ + return [ + 'stockitemlocation', + 'transferorder', + 'purchaseorder', + 'salesorder', + 'returnorder', + 'buildorder', + ] + + def _apply_model_reference_fields(self, kwargs: dict, deltas: dict) -> None: + """Pop any model reference kwargs (see model_reference_fields) and record their pk in deltas.""" + for field in StockItem.model_reference_fields(): + instance = deltas.pop(field, None) or kwargs.pop(field, None) + + if instance is None: + continue + elif hasattr(instance, 'pk'): + deltas[field] = instance.pk + else: + deltas[field] = instance + + def _resolve_status_kwarg(self, kwargs: dict): + """Pop a status value from kwargs, preferring 'status' over 'status_custom_key'. + + Returns: + The resolved status value, or None if neither key was provided (or truthy) + """ + return kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) + + def _apply_status_change(self, status, deltas: dict) -> None: + """Apply a status change to this StockItem, recording delta information. + + Args: + status: The new status value (may be a custom status key) + deltas: A dict to update with delta information (mutated in place) + """ + if not status or self.compare_status(status): + return + + old_custom_status = self.get_custom_status() + old_status_logical = self.status + self.set_status(status) + + deltas['status'] = status # may be a custom value + deltas['status_logical'] = self.status # always the logical value + deltas['old_status'] = ( + old_custom_status if old_custom_status else old_status_logical + ) + deltas['old_status_logical'] = old_status_logical + + def _apply_optional_transfer_fields(self, kwargs: dict, deltas: dict) -> None: + """Apply optional transfer fields (see optional_transfer_fields) from kwargs.""" + for field in StockItem.optional_transfer_fields(): + if field in kwargs: + setattr(self, field, kwargs[field]) + + # If the provided value is a model instance, store the primary key in the deltas dict + if hasattr(kwargs[field], 'pk'): + deltas[field] = kwargs[field].pk + else: + deltas[field] = kwargs[field] + @transaction.atomic def move(self, location, notes, user, **kwargs): """Move part to a new location. @@ -2543,6 +2897,10 @@ class StockItem( """ current_location = self.location + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + return False + try: quantity = Decimal(kwargs.pop('quantity', self.quantity)) except InvalidOperation: @@ -2570,9 +2928,11 @@ class StockItem( kwargs['notes'] = notes # Split the existing StockItem in two - self.splitStock(quantity, location, user, allow_production=True, **kwargs) + new_stock = self.splitStock( + quantity, location, user, allow_production=True, **kwargs + ) - return True + return new_stock is not None # Moving into the same location triggers a different history code same_location = location == self.location @@ -2588,28 +2948,12 @@ class StockItem( else: tracking_info['location'] = location.pk - status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) - - if status and not self.compare_status(status): - old_custom_status = self.get_custom_status() - old_status_logical = self.status - self.set_status(status) - tracking_info['status'] = status # may be a custom value - tracking_info['status_logical'] = self.status # always the logical value - tracking_info['old_status'] = ( - old_custom_status if old_custom_status else old_status_logical - ) - tracking_info['old_status_logical'] = old_status_logical - - transferorder = kwargs.pop('transferorder', None) - if transferorder: - tracking_info['transferorder'] = transferorder.pk + status = self._resolve_status_kwarg(kwargs) + self._apply_status_change(status, tracking_info) + self._apply_model_reference_fields(kwargs, tracking_info) # Optional fields which can be supplied in a 'move' call - for field in StockItem.optional_transfer_fields(): - if field in kwargs: - setattr(self, field, kwargs[field]) - tracking_info[field] = kwargs[field] + self._apply_optional_transfer_fields(kwargs, tracking_info) self.add_tracking_entry(tracking_code, user, notes=notes, deltas=tracking_info) @@ -2626,6 +2970,37 @@ class StockItem( return True + def lock_quantity(self) -> bool: + """Acquire a database row-level lock on this StockItem. + + Once the lock is held, the 'quantity' field is refreshed from the database, + so that read-modify-write adjustments operate on the current committed value + rather than a (potentially stale) in-memory copy. + + Note: Must be called from within a database transaction, + and the lock is held until that transaction completes. + + Returns: + False if this StockItem no longer exists in the database. + """ + if not self.pk: + return False + + quantity = ( + StockItem.objects + .select_for_update() + .filter(pk=self.pk) + .values_list('quantity', flat=True) + .first() + ) + + if quantity is None: + return False + + self.quantity = quantity + + return True + @transaction.atomic def updateQuantity(self, quantity): """Update stock quantity for this item. @@ -2635,18 +3010,23 @@ class StockItem( Returns: - True if the quantity was saved - False if the StockItem was deleted + - None if the provided quantity was invalid, or the item is serialized """ # Do not adjust quantity of a serialized part if self.serialized: return try: - self.quantity = Decimal(quantity) + quantity = Decimal(quantity) except (InvalidOperation, ValueError): return quantity = max(quantity, 0) + # No change if the quantity is the same as the current quantity + if self.quantity == quantity: + return + self.quantity = quantity if quantity == 0 and self.delete_on_deplete and self.can_delete(): @@ -2683,6 +3063,10 @@ class StockItem( if count < 0: return False + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + return False + tracking_info = {} location = kwargs.pop('location', None) @@ -2693,46 +3077,50 @@ class StockItem( tracking_info['location'] = location.pk tracking_info['old_location'] = old_location.pk if old_location else None - status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) + status = self._resolve_status_kwarg(kwargs) + self._apply_status_change(status, tracking_info) - if status and not self.compare_status(status): - old_custom_status = self.get_custom_status() - old_status_logical = self.status - self.set_status(status) - tracking_info['status'] = status # may be a custom value - tracking_info['status_logical'] = self.status # always the logical value - tracking_info['old_status'] = ( - old_custom_status if old_custom_status else old_status_logical - ) - tracking_info['old_status_logical'] = old_status_logical + # Optional fields which can be supplied in a 'stocktake' call + self._apply_optional_transfer_fields(kwargs, tracking_info) - if self.serialized or self.updateQuantity(count): - tracking_info['quantity'] = 1 if self.serialized else float(count) + # Have any fields (other than quantity) been updated? + # Must be determined *before* model reference deltas are extracted, + # as those only affect the tracking entry (not the model instance) + fields_updated = len(tracking_info) > 0 + self._apply_model_reference_fields(kwargs, tracking_info) + + quantity_updated = self.serialized or self.updateQuantity(count) + + # Record the resulting quantity, whether or not this item survived the stocktake + # (self.quantity is updated by updateQuantity() even if the item was deleted) + tracking_info['quantity'] = 1 if self.serialized else float(self.quantity) + + # Save if the quantity or any other field was changed. + # Note that updateQuantity() may have *deleted* the item (depleted to zero), + # in which case there is nothing left to save. + if self.pk and (quantity_updated or fields_updated): self.stocktake_date = InvenTree.helpers.current_date() self.stocktake_user = user - # Optional fields which can be supplied in a 'stocktake' call - for field in StockItem.optional_transfer_fields(): - if field in kwargs: - setattr(self, field, kwargs[field]) - tracking_info[field] = kwargs[field] - self.save(add_note=False) - self.add_tracking_entry( - StockHistoryCode.STOCK_COUNT, - user, - notes=kwargs.get('notes', ''), - deltas=tracking_info, - ) - trigger_event( StockEvents.ITEM_COUNTED, id=self.id, quantity=1 if self.serialized else float(self.quantity), ) + # Always record a tracking entry, even if the item was deleted as a result + # of this stocktake (e.g. counted to zero with delete_on_deplete set) - + # StockItemTracking.item uses SET_NULL so the history is retained regardless. + self.add_tracking_entry( + StockHistoryCode.STOCK_COUNT, + user, + notes=kwargs.get('notes', ''), + deltas=tracking_info, + ) + @transaction.atomic def add_stock(self, quantity, user, **kwargs): """Add a specified quantity of stock to this item. @@ -2758,30 +3146,22 @@ class StockItem( if quantity <= 0: return False + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + return False + tracking_info = {} - status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) - - if status and not self.compare_status(status): - old_custom_status = self.get_custom_status() - old_status_logical = self.status - self.set_status(status) - tracking_info['status'] = status # may be a custom value - tracking_info['status_logical'] = self.status # always the logical value - tracking_info['old_status'] = ( - old_custom_status if old_custom_status else old_status_logical - ) - tracking_info['old_status_logical'] = old_status_logical + status = self._resolve_status_kwarg(kwargs) + self._apply_status_change(status, tracking_info) + self._apply_model_reference_fields(kwargs, tracking_info) if self.updateQuantity(self.quantity + quantity): tracking_info['added'] = float(quantity) tracking_info['quantity'] = float(self.quantity) # Optional fields which can be supplied in a 'stocktake' call - for field in StockItem.optional_transfer_fields(): - if field in kwargs: - setattr(self, field, kwargs[field]) - tracking_info[field] = kwargs[field] + self._apply_optional_transfer_fields(kwargs, tracking_info) self.save(add_note=False) @@ -2819,50 +3199,43 @@ class StockItem( except InvalidOperation: return False + # Cannot remove more than the available quantity + # (also ensures the recorded history matches the actual removal) + quantity = min(quantity, self.quantity) + if quantity <= 0: return False + # Lock the database row, so concurrent adjustments are serialized + if not self.lock_quantity(): + return False + deltas = {} - status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) + status = self._resolve_status_kwarg(kwargs) + self._apply_status_change(status, deltas) + self._apply_model_reference_fields(kwargs, deltas) - if status and not self.compare_status(status): - old_custom_status = self.get_custom_status() - old_status_logical = self.status - self.set_status(status) - deltas['status'] = status # may be a custom value - deltas['status_logical'] = self.status # always the logical value - deltas['old_status'] = ( - old_custom_status if old_custom_status else old_status_logical - ) - deltas['old_status_logical'] = old_status_logical + quantity_updated = self.updateQuantity(self.quantity - quantity) - if self.updateQuantity(self.quantity - quantity): - deltas['removed'] = float(quantity) - deltas['quantity'] = float(self.quantity) - - if location := kwargs.get('location'): - deltas['location'] = location.pk - - if stockitem := kwargs.get('stockitem'): - deltas['stockitem'] = stockitem.pk + # Record the resulting quantity, whether or not this item survived the removal + # (self.quantity is updated by updateQuantity() even if the item was deleted) + deltas['removed'] = float(quantity) + deltas['quantity'] = float(self.quantity) + if quantity_updated: # Optional fields which can be supplied in a 'stocktake' call - for field in StockItem.optional_transfer_fields(): - if field in kwargs: - setattr(self, field, kwargs[field]) - deltas[field] = kwargs[field] - - transferorder = kwargs.pop('transferorder', None) - if transferorder: - deltas['transferorder'] = transferorder.pk + self._apply_optional_transfer_fields(kwargs, deltas) self.save(add_note=False) - if record_tracking: - self.add_tracking_entry( - code, user, notes=kwargs.get('notes', ''), deltas=deltas - ) + # Always record a tracking entry, even if the item was deleted as a result + # of this removal (e.g. depleted to zero with delete_on_deplete set) - + # StockItemTracking.item uses SET_NULL so the history is retained regardless. + if record_tracking: + self.add_tracking_entry( + code, user, notes=kwargs.get('notes', ''), deltas=deltas + ) return True @@ -3033,18 +3406,86 @@ def after_save_stock_item(sender, instance: StockItem, created, **kwargs): """Hook function to be executed after StockItem object is saved/updated.""" from part import tasks as part_tasks - if not InvenTree.ready.isImportingData(): - if InvenTree.ready.canAppAccessDatabase(allow_test=True): - InvenTree.tasks.offload_task( - part_tasks.notify_low_stock_if_required, - instance.part.pk, - group='notification', - force_async=True, - ) + if InvenTree.ready.isImportingData() or InvenTree.ready.isRunningMigrations(): + return - if InvenTree.ready.canAppAccessDatabase(allow_test=settings.TESTING_PRICING): - if instance.part: - instance.part.schedule_pricing_update(create=True) + if InvenTree.ready.canAppAccessDatabase(allow_test=True): + InvenTree.tasks.offload_task( + part_tasks.notify_low_stock_if_required, + instance.part.pk, + group='notification', + force_async=True, + ) + + if InvenTree.ready.canAppAccessDatabase(allow_test=settings.TESTING_PRICING): + if instance.part: + instance.part.schedule_pricing_update(create=True) + + +# Context-local batch of pending StockItemTracking entries (see batch_tracking_entries()) +_tracking_batch: contextvars.ContextVar = contextvars.ContextVar( + 'tracking_batch', default=None +) + + +class TrackingEntryBatch: + """Collects StockItemTracking entries created within a batch_tracking_entries() scope.""" + + def __init__(self): + """Initialize an empty batch.""" + self.entries: list[StockItemTracking] = [] + + def add(self, entry: StockItemTracking) -> None: + """Record a single (unsaved) tracking entry against this batch.""" + self.entries.append(entry) + + def flush(self) -> None: + """Bulk-create all entries collected so far, in a single database write.""" + entries, self.entries = self.entries, [] + + if entries: + StockItemTracking.objects.bulk_create(entries, batch_size=250) + + +@contextmanager +def batch_tracking_entries(): + """Batch StockItemTracking entries created within this scope into a single bulk_create(). + + StockItem.add_tracking_entry() saves its entry immediately by default (commit=True). + While this context is active, any such call - made directly, or indirectly via a nested + function call - is queued instead of saved immediately. The queued entries are flushed via + a single bulk_create() when the current transaction commits (or immediately, if no + transaction is active). If the transaction is instead rolled back, the queued entries are + discarded, rather than being written for a change that never happened. + + Calls that already pass commit=False to add_tracking_entry() are unaffected either way - + that contract (the caller takes ownership of saving/collecting the entry itself, as done + for example in PurchaseOrder.receive_line_items()) is unchanged. + + Nesting is not supported: a nested batch_tracking_entries() call reuses the outer batch, + and only the outermost call schedules a flush. + + This mirrors plugin.base.event.events.batch_events() - see that docstring for the + reasoning behind the on-commit flush and the context-local (rather than parameter-based) + design, which allows existing single-item entrypoints (e.g. StockItem.stocktake()) to be + reused unmodified by both single-item and bulk callers. + + Yields: + The current TrackingEntryBatch instance + """ + if _tracking_batch.get() is not None: + # Already inside a batch - extend it, rather than creating a nested one + yield _tracking_batch.get() + return + + batch = TrackingEntryBatch() + token = _tracking_batch.set(batch) + + try: + yield batch + finally: + _tracking_batch.reset(token) + transaction.on_commit(batch.flush) class StockItemTracking(InvenTree.models.InvenTreeModel): diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 836c7e414b..dec9cc8ba9 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -31,6 +31,7 @@ import stock.status_codes from common.settings import get_global_setting from generic.states.fields import InvenTreeCustomStatusSerializerMixin from importer.registry import register_importer +from InvenTree.fields import PrefetchedPrimaryKeyRelatedField from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( CustomStatusSerializerMixin, @@ -39,6 +40,8 @@ from InvenTree.serializers import ( OptionalField, TreePathSerializer, ) +from InvenTree.tasks import batch_offload_tasks +from plugin.base.event.events import batch_events from users.serializers import UserSerializer from .models import ( @@ -47,6 +50,7 @@ from .models import ( StockItemTracking, StockLocation, StockLocationType, + batch_tracking_entries, ) logger = structlog.get_logger('inventree') @@ -833,16 +837,22 @@ class SerializeStockItemSerializer(serializers.Serializer): part=item.part, ) - return ( - item.serializeStock( - data['quantity'], - serials, - user=user, - notes=data.get('notes', ''), - location=data['destination'], + with ( + transaction.atomic(), + batch_events(), + batch_tracking_entries(), + batch_offload_tasks(), + ): + return ( + item.serializeStock( + data['quantity'], + serials, + user=user, + notes=data.get('notes', ''), + location=data['destination'], + ) + or [] ) - or [] - ) class InstallStockItemSerializer(serializers.Serializer): @@ -952,6 +962,15 @@ class UninstallStockItemSerializer(serializers.Serializer): allow_blank=True, ) + def validate_location(self, location): + """Validate the provided location.""" + if location and location.structural: + raise ValidationError( + _('Structural locations cannot be assigned stock items') + ) + + return location + def save(self): """Uninstall stock item.""" item = self.context.get('item') @@ -969,6 +988,227 @@ class UninstallStockItemSerializer(serializers.Serializer): item.uninstall_into_location(location, request.user, note) +class StockStatusCustomSerializer(serializers.ChoiceField): + """Serializer to allow annotating the schema to use int where custom values may be entered.""" + + def __init__(self, *args, **kwargs): + """Initialize the status selector.""" + if 'choices' not in kwargs: + kwargs['choices'] = stock.status_codes.StockStatus.items(custom=True) + + if 'label' not in kwargs: + kwargs['label'] = _('Status') + + if 'help_text' not in kwargs: + kwargs['help_text'] = _('Stock item status code') + + if InvenTree.ready.isGeneratingSchema(): + kwargs['help_text'] = ( + kwargs['help_text'] + + '\n\n' + + '\n'.join( + f'* `{value}` - {label}' for value, label in kwargs['choices'] + ) + + "\n\nAdditional custom status keys may be retrieved from the 'stock_status_retrieve' call." + ) + + super().__init__(*args, **kwargs) + + +class DisassemblyLineSerializer(serializers.Serializer): + """Serializer for a single component line in a stock disassembly operation.""" + + class Meta: + """Metaclass options.""" + + fields = [ + 'bom_item', + 'quantity', + 'location', + 'status', + 'purchase_price', + 'purchase_price_currency', + ] + + bom_item = serializers.PrimaryKeyRelatedField( + queryset=part_models.BomItem.objects.all(), + many=False, + required=True, + allow_null=False, + label=_('BOM Item'), + help_text=_('BOM line which defines the component part to break out'), + ) + + quantity = serializers.DecimalField( + max_digits=15, + decimal_places=5, + min_value=Decimal(0), + required=True, + label=_('Quantity'), + help_text=_('Quantity of the component part to create'), + ) + + def validate_quantity(self, quantity): + """Validation for the 'quantity' field.""" + if quantity <= 0: + raise ValidationError(_('Quantity must be greater than zero')) + + return quantity + + location = serializers.PrimaryKeyRelatedField( + queryset=StockLocation.objects.all(), + many=False, + allow_null=True, + required=False, + label=_('Location'), + help_text=_('Destination location for the component items'), + ) + + status = StockStatusCustomSerializer( + required=False, help_text=_('Status code for the component items') + ) + + purchase_price = InvenTree.serializers.InvenTreeMoneySerializer( + label=_('Purchase Price'), + required=False, + allow_null=True, + default=None, + help_text=_( + 'Unit purchase price for the component items (leave blank for automatic cost allocation)' + ), + ) + + purchase_price_currency = InvenTreeCurrencySerializer( + required=False, help_text=_('Purchase price currency') + ) + + +class DisassembleStockItemSerializer(serializers.Serializer): + """DRF serializer class for disassembling a StockItem into component parts. + + Note: The stock item being disassembled is provided via the serializer context + """ + + class Meta: + """Metaclass options.""" + + fields = ['items', 'quantity', 'location', 'notes'] + + items = DisassemblyLineSerializer(many=True) + + quantity = serializers.DecimalField( + max_digits=15, + decimal_places=5, + min_value=Decimal(0), + required=True, + label=_('Quantity'), + help_text=_('Number of assemblies to disassemble'), + ) + + def validate_quantity(self, quantity): + """Validation for the 'quantity' field.""" + item = self.context.get('item') + + if not item: + raise ValidationError(_('No stock item provided')) + + if quantity <= 0: + raise ValidationError(_('Quantity must be greater than zero')) + + if quantity > item.quantity: + raise ValidationError( + _('Quantity must not exceed available stock quantity') + + f' ({item.quantity})' + ) + + return quantity + + location = serializers.PrimaryKeyRelatedField( + queryset=StockLocation.objects.all(), + many=False, + allow_null=True, + required=False, + label=_('Location'), + help_text=_('Default destination location for the component items'), + ) + + notes = serializers.CharField( + required=False, + allow_blank=True, + label=_('Notes'), + help_text=_('Optional note field'), + ) + + def validate(self, data): + """Validate the disassembly operation. + + - The stock item must be "in stock" + - Each line must reference a valid BOM item for the part + - Each BOM item may only be referenced once + """ + data = super().validate(data) + + item = self.context.get('item') + + if not item: + raise ValidationError(_('No stock item provided')) + + if not item.in_stock: + raise ValidationError(_('Stock item is unavailable')) + + items = data.get('items', []) + + if len(items) == 0: + raise ValidationError(_('Line items must be provided')) + + # The set of valid BOM items for this part. + # Consumable BOM lines (and lines pointing to a virtual part) are excluded, + # as these components are not expected to be tracked as physical stock + bom_items = item.part.get_bom_items(include_virtual=False).filter( + part_models.BomItem.consumable_filter(consumable=False) + ) + + bom_item_pks = set() + + for line in items: + bom_item = line['bom_item'] + + if not bom_items.filter(pk=bom_item.pk).exists(): + raise ValidationError( + _('BOM item is not valid for the selected stock item') + ) + + if bom_item.pk in bom_item_pks: + raise ValidationError(_('Duplicate BOM items provided')) + + bom_item_pks.add(bom_item.pk) + + return data + + def save(self) -> list[StockItem]: + """Disassemble the provided StockItem into its component parts. + + Returns: + A list of StockItem objects created by the disassembly operation. + """ + item = self.context['item'] + request = self.context.get('request') + + data = self.validated_data + + try: + return item.disassemble( + data['quantity'], + data['items'], + request.user if request else None, + location=data.get('location', None), + notes=data.get('notes', ''), + ) + except DjangoValidationError as exc: + # Catch model errors and re-throw as DRF errors + raise ValidationError(detail=serializers.as_serializer_error(exc)) + + class ConvertStockItemSerializer(serializers.Serializer): """DRF serializer class for converting a StockItem to a valid variant part.""" @@ -1032,33 +1272,6 @@ class ConvertStockItemSerializer(serializers.Serializer): help_text='Status key, chosen from the list of StockStatus keys' ) ) -class StockStatusCustomSerializer(serializers.ChoiceField): - """Serializer to allow annotating the schema to use int where custom values may be entered.""" - - def __init__(self, *args, **kwargs): - """Initialize the status selector.""" - if 'choices' not in kwargs: - kwargs['choices'] = stock.status_codes.StockStatus.items(custom=True) - - if 'label' not in kwargs: - kwargs['label'] = _('Status') - - if 'help_text' not in kwargs: - kwargs['help_text'] = _('Stock item status code') - - if InvenTree.ready.isGeneratingSchema(): - kwargs['help_text'] = ( - kwargs['help_text'] - + '\n\n' - + '\n'.join( - f'* `{value}` - {label}' for value, label in kwargs['choices'] - ) - + "\n\nAdditional custom status keys may be retrieved from the 'stock_status_retrieve' call." - ) - - super().__init__(*args, **kwargs) - - class StockChangeStatusSerializer(serializers.Serializer): """Serializer for changing status of multiple StockItem objects.""" @@ -1683,7 +1896,8 @@ class StockAdjustmentItemSerializer(serializers.Serializer): super().__init__(*args, **kwargs) - pk = serializers.PrimaryKeyRelatedField( + pk = PrefetchedPrimaryKeyRelatedField( + cache_key='_stockitems', queryset=StockItem.objects.all(), many=False, allow_null=False, @@ -1773,6 +1987,27 @@ class StockAdjustmentSerializer(serializers.Serializer): help_text=_('Stock transaction notes'), ) + def to_internal_value(self, data): + """Bulk-fetch referenced StockItem objects before per-item validation. + + Populates the '_stockitems' context cache that PrefetchedPrimaryKeyRelatedField + looks up against, avoiding one .get() query per item in the 'items' list. + """ + pks = set() + + for item in data.get('items', []): + try: + pks.add(int(item.get('pk'))) + except (TypeError, ValueError): + pass + + if pks: + self.context['_stockitems'] = { + obj.pk: obj for obj in StockItem.objects.filter(pk__in=pks) + } + + return super().to_internal_value(data) + def validate(self, data): """Make sure items are provided.""" super().validate(data) @@ -1782,6 +2017,10 @@ class StockAdjustmentSerializer(serializers.Serializer): if len(items) == 0: raise ValidationError(_('A list of stock items must be provided')) + # Process items in stable (pk) order, so that concurrent multi-item + # requests acquire database row locks in the same order (deadlock avoidance) + data['items'] = sorted(items, key=lambda entry: entry['pk'].pk) + return data @@ -1820,7 +2059,12 @@ class StockCountSerializer(StockAdjustmentSerializer): notes = data.get('notes', '') location = data.get('location', None) - with transaction.atomic(): + with ( + transaction.atomic(), + batch_events(), + batch_tracking_entries(), + batch_offload_tasks(), + ): for item in items: stock_item = item['pk'] quantity = item['quantity'] @@ -1848,7 +2092,12 @@ class StockAddSerializer(StockAdjustmentSerializer): data = self.validated_data notes = data.get('notes', '') - with transaction.atomic(): + with ( + transaction.atomic(), + batch_events(), + batch_tracking_entries(), + batch_offload_tasks(), + ): for item in data['items']: stock_item = item['pk'] quantity = item['quantity'] @@ -1877,7 +2126,12 @@ class StockRemoveSerializer(StockAdjustmentSerializer): data = self.validated_data notes = data.get('notes', '') - with transaction.atomic(): + with ( + transaction.atomic(), + batch_events(), + batch_tracking_entries(), + batch_offload_tasks(), + ): for item in data['items']: stock_item = item['pk'] quantity = item['quantity'] @@ -1934,7 +2188,12 @@ class StockTransferSerializer(StockAdjustmentSerializer): notes = data.get('notes', '') location = data['location'] - with transaction.atomic(): + with ( + transaction.atomic(), + batch_events(), + batch_tracking_entries(), + batch_offload_tasks(), + ): for item in items: # Required fields stock_item = item['pk'] @@ -1972,6 +2231,10 @@ class StockTransferSerializer(StockAdjustmentSerializer): split_transfer_deltas=transfer_deltas, **kwargs, ) + + if not piece: + continue + merge_kwargs['transfer_deltas'] = transfer_deltas target.merge_stock_items([piece], **merge_kwargs) else: diff --git a/src/backend/InvenTree/stock/status_codes.py b/src/backend/InvenTree/stock/status_codes.py index 50cad87a90..8f92a630b8 100644 --- a/src/backend/InvenTree/stock/status_codes.py +++ b/src/backend/InvenTree/stock/status_codes.py @@ -75,6 +75,10 @@ class StockHistoryCode(StatusCode): # Stock merging operations MERGED_STOCK_ITEMS = 45, _('Merged stock items') + # Stock disassembly operations + DISASSEMBLED = 46, _('Disassembled into components') + CREATED_FROM_DISASSEMBLY = 47, _('Created from disassembly') + # Convert stock item to variant CONVERTED_TO_VARIANT = 48, _('Converted to variant') diff --git a/src/backend/InvenTree/stock/tasks.py b/src/backend/InvenTree/stock/tasks.py index d8b647152f..d56fed9630 100644 --- a/src/backend/InvenTree/stock/tasks.py +++ b/src/backend/InvenTree/stock/tasks.py @@ -6,71 +6,12 @@ import structlog from opentelemetry import trace from common.settings import get_global_setting -from InvenTree.tasks import ScheduledTask, offload_task, scheduled_task +from InvenTree.tasks import ScheduledTask, scheduled_task tracer = trace.get_tracer(__name__) logger = structlog.get_logger('inventree') -@tracer.start_as_current_span('rebuild_stock_items') -def rebuild_stock_items(): - """Rebuild the entire StockItem tree structure. - - This may be necessary if the tree structure has become corrupted or inconsistent. - """ - from InvenTree.exceptions import log_error - from InvenTree.sentry import report_exception - from stock.models import StockItem - - logger.info('Rebuilding StockItem tree structure') - - try: - StockItem.objects.rebuild() - except Exception as e: - # This is a critical error, explicitly report to sentry - report_exception(e) - - log_error('rebuild_stock_items') - logger.exception('Failed to rebuild StockItem tree: %s', e) - - -def rebuild_stock_item_tree(tree_id: int, rebuild_on_fail: bool = True) -> bool: - """Rebuild the stock tree structure. - - Arguments: - tree_id (int): The ID of the StockItem tree to rebuild. - rebuild_on_fail (bool): If True, will attempt to rebuild the entire StockItem tree if the partial rebuild fails. - - Returns: - bool: True if the partial tree rebuild was successful, False otherwise. - - - If the rebuild fails, schedule a rebuild of the entire StockItem tree. - """ - from InvenTree.exceptions import log_error - from InvenTree.sentry import report_exception - from stock.models import StockItem - - if tree_id: - try: - StockItem.objects.partial_rebuild(tree_id) - logger.info('Rebuilt StockItem tree for tree_id: %s', tree_id) - return True - except Exception as e: - # This is a critical error, explicitly report to sentry - report_exception(e) - - log_error('rebuild_stock_item_tree') - logger.warning('Failed to rebuild StockItem tree for tree_id: %s', tree_id) - # If the partial rebuild fails, rebuild the entire tree - if rebuild_on_fail: - offload_task(rebuild_stock_items, group='stock') - return False - else: - # No tree_id provided, so rebuild the entire tree - StockItem.objects.rebuild() - return True - - @tracer.start_as_current_span('delete_old_stock_tracking') @scheduled_task(ScheduledTask.DAILY) def delete_old_stock_tracking(): diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index 5fe46e689f..2cad462ff4 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -14,6 +14,7 @@ from rest_framework import status import build.models import company.models +import order.models import part.models from common.models import InvenTreeCustomUserStateModel, InvenTreeSetting from common.settings import set_global_setting @@ -616,17 +617,7 @@ class StockItemListTest(StockAPITestCase): item.delete() for idx in range(1000): - items.append( - StockItem( - part=part, - location=location, - quantity=idx % 10, - level=0, - lft=0, - rght=0, - tree_id=0, - ) - ) + items.append(StockItem(part=part, location=location, quantity=idx % 10)) StockItem.objects.bulk_create(items, batch_size=250) @@ -737,13 +728,6 @@ class StockItemListTest(StockAPITestCase): response = self.get_stock(location=7) self.assertEqual(len(response), 18) - def test_filter_by_exclude_tree(self): - """Filter StockItem by excluding a StockItem tree.""" - response = self.get_stock(exclude_tree=1000) - for item in response: - self.assertNotEqual(item['pk'], 1000) - self.assertNotEqual(item['parent'], 1000) - def test_filter_by_depleted(self): """Filter StockItem by depleted status.""" response = self.get_stock(depleted=1) @@ -1043,15 +1027,7 @@ class StockItemListTest(StockAPITestCase): part = parts[idx % N_PARTS] location = locations[idx % N_LOCATIONS] - item = StockItem( - part=part, - location=location, - quantity=10, - level=0, - tree_id=0, - lft=0, - rght=0, - ) + item = StockItem(part=part, location=location, quantity=10) stock_items.append(item) idx += 1 @@ -1167,8 +1143,7 @@ class StockItemListTest(StockAPITestCase): prt = Part.objects.first() StockItem.objects.bulk_create([ - StockItem(part=prt, quantity=1, level=0, tree_id=0, lft=0, rght=0) - for _ in range(100) + StockItem(part=prt, quantity=1) for _ in range(100) ]) # List *all* stock items @@ -1248,7 +1223,7 @@ class StockItemListTest(StockAPITestCase): parent_item.refresh_from_db() # Check that the parent item has 5 child items - self.assertEqual(parent_item.get_descendants(include_self=False).count(), 5) + self.assertEqual(parent_item.get_children().count(), 5) self.assertEqual(my_part.stock_items.count(), 6) # Fetch stock list via API @@ -1453,10 +1428,6 @@ class CustomStockItemStatusTest(StockAPITestCase): StockItem( part=part, quantity=1, - level=0, - tree_id=0, - lft=0, - rght=0, status=custom_statuses[i % 10].logical_key, status_custom_key=custom_statuses[i % 10].key, ) @@ -1553,7 +1524,12 @@ class StockItemTest(StockAPITestCase): """Test creation of a StockItem via the API.""" # POST with an empty part reference - response = self.client.post(self.list_url, data={'quantity': 10, 'location': 1}) + response = self.post( + self.list_url, + data={'quantity': 10, 'location': 1}, + max_query_count=2250, + expected_code=400, + ) self.assertContains( response, @@ -1563,8 +1539,11 @@ class StockItemTest(StockAPITestCase): # POST with an invalid part reference - response = self.client.post( - self.list_url, data={'quantity': 10, 'location': 1, 'part': 10000000} + response = self.post( + self.list_url, + data={'quantity': 10, 'location': 1, 'part': 10000000}, + max_query_count=2250, + expected_code=400, ) self.assertContains( @@ -1630,6 +1609,37 @@ class StockItemTest(StockAPITestCase): for new_item in new_items: self.assertIsNotNone(new_item.creation_date) + def test_bulk_serialize_benchmark(self): + """Benchmark: measure the number of DB queries required to serialize 100 stock items at once.""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + part = Part.objects.create( + name='Bulk serialize benchmark part', + description='Created for the stock serialize query-count benchmark', + trackable=True, + ) + + location = StockLocation.objects.create( + name='Bulk serialize benchmark location' + ) + + item = StockItem.objects.create(part=part, location=location, quantity=100) + + url = reverse('api-stock-item-serialize', kwargs={'pk': item.pk}) + + data = {'quantity': 100, 'serial_numbers': '1-100', 'destination': location.pk} + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + # TODO: 2026-07-12 : Refactor this API call + response = self.post( + url, data, max_query_count=1300, benchmark=True, format='json' + ) + + self.assertEqual(response.status_code, 201) + self.assertEqual(len(response.data), 100) + def test_stock_item_create_with_supplier_part(self): """Test creation of a StockItem via the API, including SupplierPart data.""" # POST with non-existent supplier part @@ -1967,6 +1977,20 @@ class StockItemTest(StockAPITestCase): url = reverse('api-stock-item-uninstall', kwargs={'pk': sub_item.pk}) + # An uninstalled item cannot be moved into a structural location + structural = StockLocation.objects.create( + name='Structural location', structural=True + ) + + response = self.post(url, {'location': structural.pk}, expected_code=400) + + self.assertIn( + 'Structural locations cannot be assigned stock items', str(response.data) + ) + + sub_item.refresh_from_db() + self.assertEqual(sub_item.belongs_to, item) + self.post(url, {'location': 1}, expected_code=201) sub_item.refresh_from_db() @@ -2215,6 +2239,487 @@ class StockItemTest(StockAPITestCase): self.assertEqual(item.batch, 'NEW-BATCH-CODE') +class StockItemDisassembleTest(StockAPITestCase): + """Series of API tests for the StockItem disassembly endpoint.""" + + def setUp(self): + """Create a stock item of an assembly part, ready for disassembly.""" + super().setUp() + + # Part 100 ("Bob") is an assembly with 4 BOM lines + self.assembly = part.models.Part.objects.get(pk=100) + + self.item = StockItem.objects.create( + part=self.assembly, + quantity=10, + location=StockLocation.objects.get(pk=1), + purchase_price=Money(100, 'USD'), + ) + + self.url = reverse('api-stock-item-disassemble', kwargs={'pk': self.item.pk}) + + def test_validation(self): + """Test validation checks for the disassembly endpoint.""" + # Empty request + response = self.post(self.url, {}, expected_code=400) + + self.assertIn('This field is required', str(response.data['items'])) + self.assertIn('This field is required', str(response.data['quantity'])) + + # No line items provided + response = self.post(self.url, {'items': [], 'quantity': 1}, expected_code=400) + + self.assertIn('Line items must be provided', str(response.data)) + + # Quantity exceeds available stock + response = self.post( + self.url, + {'items': [{'bom_item': 1, 'quantity': 10}], 'quantity': 100}, + expected_code=400, + ) + + self.assertIn( + 'Quantity must not exceed available stock quantity', str(response.data) + ) + + # BOM item which points to a different part (BomItem pk=5 -> part 1) + response = self.post( + self.url, + {'items': [{'bom_item': 5, 'quantity': 1}], 'quantity': 1}, + expected_code=400, + ) + + self.assertIn( + 'BOM item is not valid for the selected stock item', str(response.data) + ) + + # Duplicated BOM items + response = self.post( + self.url, + { + 'items': [ + {'bom_item': 1, 'quantity': 10}, + {'bom_item': 1, 'quantity': 5}, + ], + 'quantity': 1, + }, + expected_code=400, + ) + + self.assertIn('Duplicate BOM items provided', str(response.data)) + + def test_consumable_and_virtual_excluded(self): + """Consumable BOM lines, and lines pointing to a virtual part, cannot be disassembled.""" + # BOM line marked as consumable directly + consumable_line = part.models.BomItem.objects.create( + part=self.assembly, + sub_part=part.models.Part.objects.get(pk=2), + quantity=1, + consumable=True, + ) + + # BOM line whose sub_part is marked as consumable + consumable_part = part.models.Part.objects.get(pk=3) + consumable_part.consumable = True + consumable_part.save() + + # BOM line whose sub_part is marked as virtual + virtual_part = part.models.Part.objects.get(pk=5) + virtual_part.virtual = True + virtual_part.save() + + for bom_item_pk in [consumable_line.pk, 2, 3]: + response = self.post( + self.url, + {'items': [{'bom_item': bom_item_pk, 'quantity': 1}], 'quantity': 1}, + expected_code=400, + ) + + self.assertIn( + 'BOM item is not valid for the selected stock item', str(response.data) + ) + + def test_disassemble(self): + """Test a valid disassembly operation, using a subset of the BOM lines.""" + n = StockItem.objects.count() + + # Disassemble 4 assemblies, but only break out 2 of the 4 BOM lines + # The second line specifies a custom location and status + response = self.post( + self.url, + { + 'items': [ + {'bom_item': 1, 'quantity': 40}, + { + 'bom_item': 4, + 'quantity': 12, + 'location': 2, + 'status': StockStatus.DAMAGED.value, + }, + ], + 'quantity': 4, + 'notes': 'Breaking apart', + }, + expected_code=201, + ) + + self.assertEqual(len(response.data), 2) + self.assertEqual(StockItem.objects.count(), n + 2) + + self.item.refresh_from_db() + self.assertEqual(self.item.quantity, 6) + + items = {entry['part']: entry for entry in response.data} + + # Check the generated component items + item_1 = StockItem.objects.get(pk=items[1]['pk']) + item_50 = StockItem.objects.get(pk=items[50]['pk']) + + self.assertEqual(item_1.quantity, 40) + self.assertEqual(item_50.quantity, 12) + + # Components inherit the location of the disassembled item by default + self.assertEqual(item_1.location, self.item.location) + self.assertEqual(item_1.status, StockStatus.OK.value) + + # A custom location and status can be specified per line + self.assertEqual(item_50.location.pk, 2) + self.assertEqual(item_50.status, StockStatus.DAMAGED.value) + + # Components are linked to the disassembled item + self.assertEqual(item_1.parent.pk, self.item.pk) + self.assertEqual(item_50.parent.pk, self.item.pk) + + # Total cost (4 x 100 USD) is allocated evenly across 52 units + self.assertAlmostEqual(float(item_1.purchase_price.amount), 400 / 52, places=4) + self.assertAlmostEqual(float(item_50.purchase_price.amount), 400 / 52, places=4) + self.assertEqual(str(item_1.purchase_price.currency), 'USD') + + # Check stock tracking entries have been created + self.assertTrue( + self.item.tracking_info.filter( + tracking_type=StockHistoryCode.DISASSEMBLED.value + ).exists() + ) + + for item in [item_1, item_50]: + entry = item.tracking_info.filter( + tracking_type=StockHistoryCode.CREATED_FROM_DISASSEMBLY.value + ).first() + + self.assertIsNotNone(entry) + self.assertEqual(entry.deltas['stockitem'], self.item.pk) + + def test_full_disassembly(self): + """Test that a fully disassembled item is retained at zero quantity.""" + self.post( + self.url, + {'items': [{'bom_item': 2, 'quantity': 400}], 'quantity': 10}, + expected_code=201, + ) + + self.item.refresh_from_db() + + self.assertEqual(self.item.quantity, 0) + self.assertFalse(self.item.in_stock) + + def test_traceability_inheritance(self): + """Test that traceability data is passed down to the generated components.""" + po = order.models.PurchaseOrder.objects.create( + supplier=company.models.Company.objects.get(pk=1), reference='PO-9999' + ) + + bo = build.models.Build.objects.create( + part=self.assembly, quantity=10, reference='BO-9999' + ) + + self.item.batch = 'ABC-123' + self.item.purchase_order = po + self.item.build = bo + self.item.save() + + response = self.post( + self.url, + {'items': [{'bom_item': 1, 'quantity': 10}], 'quantity': 1}, + expected_code=201, + ) + + component = StockItem.objects.get(pk=response.data[0]['pk']) + + # Batch code and source purchase order are inherited directly + self.assertEqual(component.batch, 'ABC-123') + self.assertEqual(component.purchase_order, po) + + # The source build order cannot be copied across (the component is not + # an output of the build) - instead it is recorded in the stock history + self.assertIsNone(component.build) + + entry = component.tracking_info.filter( + tracking_type=StockHistoryCode.CREATED_FROM_DISASSEMBLY.value + ).first() + + self.assertIsNotNone(entry) + self.assertEqual(entry.deltas['buildorder'], bo.pk) + self.assertEqual(entry.deltas['purchaseorder'], po.pk) + + def test_explicit_pricing(self): + """Test that automatic cost allocation is skipped if explicit pricing is provided.""" + response = self.post( + self.url, + { + 'items': [ + { + 'bom_item': 1, + 'quantity': 10, + 'purchase_price': 5, + 'purchase_price_currency': 'NZD', + }, + {'bom_item': 4, 'quantity': 3}, + ], + 'quantity': 1, + }, + expected_code=201, + ) + + prices = {entry['part']: entry['purchase_price'] for entry in response.data} + + self.assertAlmostEqual(prices[1], 5, places=3) + self.assertIsNone(prices[50]) + + def install_item(self, part_pk: int, quantity, **kwargs) -> StockItem: + """Install a new stock item into the assembly under test.""" + return StockItem.objects.create( + part=part.models.Part.objects.get(pk=part_pk), + quantity=quantity, + belongs_to=self.item, + location=None, + **kwargs, + ) + + def test_installed_items_partial(self): + """Installed items are uninstalled, and only the remainder is created afresh.""" + sub_1 = self.install_item(1, 12) + sub_2 = self.install_item(1, 8) + + n = StockItem.objects.count() + + # Disassemble all 10 assemblies - the line requires 100 units in total + response = self.post( + self.url, + {'items': [{'bom_item': 1, 'quantity': 100}], 'quantity': 10}, + expected_code=201, + ) + + # Two uninstalled items, plus a single new item for the remainder + self.assertEqual(len(response.data), 3) + self.assertEqual(StockItem.objects.count(), n + 1) + + pks = {entry['pk'] for entry in response.data} + self.assertIn(sub_1.pk, pks) + self.assertIn(sub_2.pk, pks) + + for sub in [sub_1, sub_2]: + sub.refresh_from_db() + self.assertIsNone(sub.belongs_to) + self.assertEqual(sub.location, self.item.location) + + new_item = StockItem.objects.get(pk=(pks - {sub_1.pk, sub_2.pk}).pop()) + self.assertEqual(new_item.part.pk, 1) + self.assertEqual(new_item.quantity, 80) + + # Uninstalled items are updated, not created afresh + self.assertTrue( + sub_1.tracking_info.filter( + tracking_type=StockHistoryCode.REMOVED_FROM_ASSEMBLY.value + ).exists() + ) + self.assertFalse( + sub_1.tracking_info.filter( + tracking_type=StockHistoryCode.CREATED_FROM_DISASSEMBLY.value + ).exists() + ) + self.assertTrue( + self.item.tracking_info.filter( + tracking_type=StockHistoryCode.REMOVED_CHILD_ITEM.value + ).exists() + ) + self.assertTrue( + new_item.tracking_info.filter( + tracking_type=StockHistoryCode.CREATED_FROM_DISASSEMBLY.value + ).exists() + ) + + def test_installed_items_full_coverage(self): + """No new stock item is created for a line fully covered by installed items.""" + sub = self.install_item(1, 120, purchase_price=Money(3, 'USD')) + + n = StockItem.objects.count() + + response = self.post( + self.url, + { + 'items': [ + {'bom_item': 1, 'quantity': 100}, + {'bom_item': 4, 'quantity': 30}, + ], + 'quantity': 10, + }, + expected_code=201, + ) + + # The first line is fully covered by the uninstalled item + self.assertEqual(len(response.data), 2) + self.assertEqual(StockItem.objects.count(), n + 1) + + sub.refresh_from_db() + self.assertIsNone(sub.belongs_to) + + # The uninstalled item retains its own purchase price + self.assertEqual(sub.purchase_price, Money(3, 'USD')) + + # The total cost (10 x 100 USD) is spread only across newly created units + new_item = StockItem.objects.get(part=50, parent=self.item) + self.assertEqual(new_item.quantity, 30) + self.assertAlmostEqual( + float(new_item.purchase_price.amount), 1000 / 30, places=4 + ) + + def test_installed_items_leftover(self): + """Installed items which do not match a BOM line are still uninstalled.""" + # Part 2 is not a component of the assembly + sub = self.install_item(2, 5, status=StockStatus.ATTENTION.value) + + response = self.post( + self.url, + { + 'items': [{'bom_item': 2, 'quantity': 400}], + 'quantity': 10, + 'location': 2, + }, + expected_code=201, + ) + + self.assertEqual(len(response.data), 2) + + sub.refresh_from_db() + self.assertIsNone(sub.belongs_to) + + # Uninstalled to the top-level destination, retaining its own status + self.assertEqual(sub.location.pk, 2) + self.assertEqual(sub.status, StockStatus.ATTENTION.value) + + # The BOM line quantity is not reduced by the unmatched item + new_item = StockItem.objects.get(part=3, parent=self.item) + self.assertEqual(new_item.quantity, 400) + + def test_installed_items_require_full_disassembly(self): + """Partial disassembly is rejected while items are installed.""" + self.install_item(1, 1) + + response = self.post( + self.url, + {'items': [{'bom_item': 1, 'quantity': 50}], 'quantity': 5}, + expected_code=400, + ) + + self.assertIn('must be disassembled in its entirety', str(response.data)) + + def test_installed_items_status_and_location(self): + """Explicit per-line status and location values are applied to uninstalled items.""" + sub_1 = self.install_item(1, 10) + sub_2 = self.install_item(50, 4, status=StockStatus.ATTENTION.value) + + self.post( + self.url, + { + 'items': [ + { + 'bom_item': 1, + 'quantity': 100, + 'location': 2, + 'status': StockStatus.DAMAGED.value, + }, + {'bom_item': 4, 'quantity': 30}, + ], + 'quantity': 10, + }, + expected_code=201, + ) + + sub_1.refresh_from_db() + self.assertEqual(sub_1.location.pk, 2) + self.assertEqual(sub_1.status, StockStatus.DAMAGED.value) + + # No explicit status provided for the second line - item status is retained + sub_2.refresh_from_db() + self.assertEqual(sub_2.location, self.item.location) + self.assertEqual(sub_2.status, StockStatus.ATTENTION.value) + + def test_installed_items_variants_and_substitutes(self): + """Installed variant and substitute parts are matched against BOM lines.""" + # Designate part 2 as a substitute for BOM line 4 + part.models.BomItemSubstitute.objects.create( + bom_item=part.models.BomItem.objects.get(pk=4), + part=part.models.Part.objects.get(pk=2), + ) + + # New BOM line against a template part, allowing variants + bom_line = part.models.BomItem.objects.create( + part=self.assembly, + sub_part=part.models.Part.objects.get(pk=10000), + quantity=5, + allow_variants=True, + ) + + substitute_item = self.install_item(2, 10) + variant_item = self.install_item(10001, 20) + + response = self.post( + self.url, + { + 'items': [ + {'bom_item': 4, 'quantity': 30}, + {'bom_item': bom_line.pk, 'quantity': 50}, + ], + 'quantity': 10, + }, + expected_code=201, + ) + + self.assertEqual(len(response.data), 4) + + for sub in [substitute_item, variant_item]: + sub.refresh_from_db() + self.assertIsNone(sub.belongs_to) + + # Line quantities are reduced by the matched installed items + new_50 = StockItem.objects.get(part=50, parent=self.item) + self.assertEqual(new_50.quantity, 20) + + new_chair = StockItem.objects.get(part=10000, parent=self.item) + self.assertEqual(new_chair.quantity, 30) + + def test_serialized(self): + """Test disassembly of a serialized stock item.""" + item = StockItem.objects.create( + part=self.assembly, quantity=1, serial='SN-DISASSEMBLE-1' + ) + + url = reverse('api-stock-item-disassemble', kwargs={'pk': item.pk}) + + self.post( + url, + {'items': [{'bom_item': 1, 'quantity': 10}], 'quantity': 1}, + expected_code=201, + ) + + item.refresh_from_db() + + # A serialized item cannot be "depleted" - it is marked as destroyed instead + self.assertEqual(item.status, StockStatus.DESTROYED.value) + self.assertFalse(item.in_stock) + + class StocktakeTest(StockAPITestCase): """Series of tests for the Stocktake API.""" @@ -2440,6 +2945,190 @@ class StocktakeTest(StockAPITestCase): str(response.data['location']), ) + def test_count_unchanged_quantity_saves_field_changes(self): + """Location / status changes are saved even if the counted quantity is unchanged. + + Regression test: counting an item to its *existing* quantity used to skip + the model save entirely, losing any location / status change while still + recording the change in stock history. + """ + item = StockItem.objects.get(pk=1234) + + quantity = item.quantity + self.assertEqual(item.location.pk, 5) + self.assertEqual(item.status, StockStatus.OK.value) + + # Clear any existing stocktake date so we can verify it gets set + item.stocktake_date = None + item.save() + + self.post( + reverse('api-stock-count'), + { + 'items': [ + { + 'pk': item.pk, + 'quantity': float(quantity), + 'status': StockStatus.DAMAGED.value, + } + ], + 'location': 1, + }, + expected_code=201, + ) + + item.refresh_from_db() + + # Quantity is unchanged, but the location and status changes must be saved + self.assertEqual(item.quantity, quantity) + self.assertEqual(item.location.pk, 1) + self.assertEqual(item.status, StockStatus.DAMAGED.value) + self.assertIsNotNone(item.stocktake_date) + + # The stock history entry must agree with the saved state + entry = StockItemTracking.objects.filter( + item=item, tracking_type=StockHistoryCode.STOCK_COUNT + ).latest('date') + self.assertEqual(entry.deltas.get('quantity'), float(quantity)) + self.assertEqual(entry.deltas.get('location'), 1) + self.assertEqual(entry.deltas.get('old_location'), 5) + self.assertEqual(entry.deltas.get('status'), StockStatus.DAMAGED.value) + self.assertEqual(entry.deltas.get('old_status'), StockStatus.OK.value) + + def test_bulk_count_query_benchmark(self): + """Benchmark: measure the number of DB queries required to count 100 stock items at once.""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + part = Part.objects.create( + name='Bulk count benchmark part', + description='Created for the stock count query-count benchmark', + ) + + location = StockLocation.objects.create(name='Bulk count benchmark location') + + items = [ + StockItem.objects.create(part=part, location=location, quantity=idx + 1) + for idx in range(100) + ] + + url = reverse('api-stock-count') + + data = { + 'items': [ + {'pk': item.pk, 'quantity': idx + 100} for idx, item in enumerate(items) + ] + } + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + # TODO: 2026-07-12 : Refactor this API call + response = self.post( + url, data, max_query_count=2250, benchmark=True, format='json' + ) + + self.assertEqual(response.status_code, 201) + self.assertEqual(len(response.data['items']), 100) + + def test_bulk_add_query_benchmark(self): + """Benchmark: measure the number of DB queries required to add stock to 100 items at once.""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + part = Part.objects.create( + name='Bulk add benchmark part', + description='Created for the stock add query-count benchmark', + ) + + location = StockLocation.objects.create(name='Bulk add benchmark location') + + items = [ + StockItem.objects.create(part=part, location=location, quantity=idx + 1) + for idx in range(100) + ] + + url = reverse('api-stock-add') + + data = {'items': [{'pk': item.pk, 'quantity': 5} for item in items]} + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + # TODO: 2026-07-12 : Refactor this API call + response = self.post( + url, data, max_query_count=2500, benchmark=True, format='json' + ) + + self.assertEqual(response.status_code, 201) + self.assertEqual(len(response.data['items']), 100) + + def test_bulk_remove_query_benchmark(self): + """Benchmark: measure the number of DB queries required to remove stock from 100 items at once.""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + part = Part.objects.create( + name='Bulk remove benchmark part', + description='Created for the stock remove query-count benchmark', + ) + + location = StockLocation.objects.create(name='Bulk remove benchmark location') + + items = [ + StockItem.objects.create(part=part, location=location, quantity=idx + 100) + for idx in range(100) + ] + + url = reverse('api-stock-remove') + + data = {'items': [{'pk': item.pk, 'quantity': 5} for item in items]} + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + # TODO: 2026-07-12 : Refactor this API call + response = self.post( + url, data, max_query_count=2250, benchmark=True, format='json' + ) + + self.assertEqual(response.status_code, 201) + self.assertEqual(len(response.data['items']), 100) + + def test_bulk_move_query_benchmark(self): + """Benchmark: measure the number of DB queries required to move 100 stock items at once.""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + part = Part.objects.create( + name='Bulk move benchmark part', + description='Created for the stock move query-count benchmark', + ) + + source = StockLocation.objects.create(name='Bulk move benchmark source') + destination = StockLocation.objects.create( + name='Bulk move benchmark destination' + ) + + items = [ + StockItem.objects.create(part=part, location=source, quantity=idx + 1) + for idx in range(100) + ] + + url = reverse('api-stock-transfer') + + data = { + 'items': [{'pk': item.pk, 'quantity': item.quantity} for item in items], + 'location': destination.pk, + } + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + # TODO: 2026-07-12 : Refactor this API call + response = self.post( + url, data, max_query_count=1250, benchmark=True, format='json' + ) + + self.assertEqual(response.status_code, 201) + self.assertEqual(len(response.data['items']), 100) + class StockTransferMergeTest(StockAPITestCase): """Tests for optional merge-on-transfer behavior.""" @@ -2542,6 +3231,9 @@ class StockTransferMergeTest(StockAPITestCase): def test_transfer_merge_does_not_copy_source_tracking(self): """Transfer merge keeps destination history and adds a single merge entry.""" + # Track total number of tracking entries created + N_TRACKING_ENTRIES = StockItemTracking.objects.count() + existing = StockItem.objects.create( part=self.part, location=self.dest, quantity=100 ) @@ -2580,6 +3272,23 @@ class StockTransferMergeTest(StockAPITestCase): self.assertEqual(merge_entry.deltas['stockitem'], incoming_pk) self.assertEqual(merge_entry.deltas['location'], self.dest.pk) + self.assertEqual(StockItemTracking.objects.count(), N_TRACKING_ENTRIES + 4) + + # Ensure tracking entries were bulk created in the correct order + entries = list(StockItemTracking.objects.order_by('-pk')[:4])[::-1] + + for idx, tt in enumerate([ + StockHistoryCode.CREATED, + StockHistoryCode.CREATED, + StockHistoryCode.STOCK_UPDATE, + StockHistoryCode.MERGED_STOCK_ITEMS, + ]): + self.assertEqual( + entries[idx].tracking_type, + tt, + f'Entry {idx} has unexpected tracking type {entries[idx].tracking_type}', + ) + def test_transfer_merge_partial_reuses_split_transfer_deltas(self): """Partial merge reuses split transfer deltas on the merge tracking entry.""" existing = StockItem.objects.create( @@ -2612,6 +3321,51 @@ class StockTransferMergeTest(StockAPITestCase): ).exists() ) + def test_transfer_merge_skips_protected_source(self): + """Merge-on-transfer must not absorb items in a protected state. + + Regression test: only the *target* item used to be validated, so a + transfer with merge=True could absorb (and delete) an in-production + build output. Such items must be moved as a separate lot instead. + """ + existing = StockItem.objects.create( + part=self.part, location=self.dest, quantity=100 + ) + + # An "in production" build output + self.part.assembly = True + self.part.save() + + bo = build.models.Build.objects.create( + reference='BO-9999', part=self.part, title='Merge test build', quantity=50 + ) + + building = StockItem.objects.create( + part=self.part, + location=self.source_loc, + quantity=50, + build=bo, + is_building=True, + ) + + self.post( + self.url, + { + 'items': [{'pk': building.pk, 'quantity': 50, 'merge': True}], + 'location': self.dest.pk, + }, + expected_code=201, + ) + + # The build output must survive - transferred as a separate lot instead + building.refresh_from_db() + self.assertTrue(building.is_building) + self.assertEqual(building.location, self.dest) + self.assertEqual(building.quantity, 50) + + existing.refresh_from_db() + self.assertEqual(existing.quantity, 100) + class StockItemDeletionTest(StockAPITestCase): """Tests for stock item deletion via the API.""" diff --git a/src/backend/InvenTree/stock/test_migrations.py b/src/backend/InvenTree/stock/test_migrations.py index c26b881f42..510df16972 100644 --- a/src/backend/InvenTree/stock/test_migrations.py +++ b/src/backend/InvenTree/stock/test_migrations.py @@ -584,3 +584,82 @@ class TestCreationDateMigration(MigratorTestCase): # Scenario 6: updated=NULL, no stocktake, no tracking → creation_date stays NULL item = StockItem.objects.get(pk=self.pk_s6) self.assertIsNone(item.creation_date) + + +class TestRemoveMpttFieldsMigration(MigratorTestCase): + """Test data migration which removes MPTT fields (level, lft, rght, tree_id) from StockItem. + + The 'parent' field itself is untouched by this migration - only the MPTT + bookkeeping fields are removed. This test ensures that parent-child + relationships between StockItem objects survive the migration boundary. + """ + + migrate_from = ('stock', '0123_remove_stockitem_review_needed') + migrate_to = ('stock', '0125_remove_mptt_fields') + + def prepare(self): + """Create a tree of StockItem objects with parent-child relationships.""" + Part = self.old_state.apps.get_model('part', 'part') + StockItem = self.old_state.apps.get_model('stock', 'stockitem') + + part = Part.objects.create( + name='Migration Test Part', level=0, tree_id=0, lft=0, rght=0 + ) + + # Root stock item, with no parent + root = StockItem.objects.create( + part=part, quantity=100, level=0, tree_id=0, lft=0, rght=0 + ) + + # A set of child items, parented to the root item + children = [ + StockItem.objects.create( + part=part, quantity=10, parent=root, level=1, tree_id=0, lft=0, rght=0 + ) + for _ in range(3) + ] + + # A grandchild item, parented to the first child item + grandchild = StockItem.objects.create( + part=part, quantity=1, parent=children[0], level=2, tree_id=0, lft=0, rght=0 + ) + + # An unrelated top-level item, with no parent + orphan = StockItem.objects.create( + part=part, quantity=5, level=0, tree_id=0, lft=0, rght=0 + ) + + self.root_pk = root.pk + self.child_pks = [child.pk for child in children] + self.grandchild_pk = grandchild.pk + self.orphan_pk = orphan.pk + + self.assertEqual(StockItem.objects.count(), 6) + + def test_migration(self): + """Test that parent associations are preserved after MPTT fields are removed.""" + StockItem = self.new_state.apps.get_model('stock', 'stockitem') + + self.assertEqual(StockItem.objects.count(), 6) + + # The MPTT bookkeeping fields should no longer exist on the model + field_names = {field.name for field in StockItem._meta.get_fields()} + for removed_field in ['level', 'lft', 'rght', 'tree_id']: + self.assertNotIn(removed_field, field_names) + + # The root item still has no parent + root = StockItem.objects.get(pk=self.root_pk) + self.assertIsNone(root.parent_id) + + # Each child item is still correctly parented to the root item + for pk in self.child_pks: + child = StockItem.objects.get(pk=pk) + self.assertEqual(child.parent_id, self.root_pk) + + # The grandchild item is still correctly parented to the first child item + grandchild = StockItem.objects.get(pk=self.grandchild_pk) + self.assertEqual(grandchild.parent_id, self.child_pks[0]) + + # The orphan item still has no parent + orphan = StockItem.objects.get(pk=self.orphan_pk) + self.assertIsNone(orphan.parent_id) diff --git a/src/backend/InvenTree/stock/tests.py b/src/backend/InvenTree/stock/tests.py index c0715bda64..810522e8b1 100644 --- a/src/backend/InvenTree/stock/tests.py +++ b/src/backend/InvenTree/stock/tests.py @@ -3,9 +3,11 @@ import datetime from django.core.exceptions import ValidationError +from django.db import transaction from django.db.models import Sum from django.test import override_settings +from django_q.models import OrmQ from djmoney.money import Money from build.models import Build @@ -14,6 +16,8 @@ from company.models import Company from InvenTree.unit_test import AdminTestCase, InvenTreeTestCase from order.models import SalesOrder from part.models import Part, PartTestTemplate +from plugin.base.event.events import batch_events +from stock.events import StockEvents from stock.status_codes import StockHistoryCode, StockStatus from .models import ( @@ -22,6 +26,7 @@ from .models import ( StockItemTracking, StockLocation, StockLocationType, + batch_tracking_entries, ) @@ -346,6 +351,299 @@ class StockTest(StockTestBase): stock.splitStock(stock.quantity, None, self.user) self.assertEqual(StockItem.objects.filter(part=3).count(), n + 1) + def test_delete_reparents_children(self): + """Test that deleting an intermediate item re-links children to the grandparent.""" + grandparent = StockItem.objects.get(id=1234) + + parent = grandparent.splitStock(200, None, self.user) + child_a = parent.splitStock(50, None, self.user) + child_b = parent.splitStock(50, None, self.user) + + self.assertEqual(parent.parent, grandparent) + self.assertEqual(child_a.parent, parent) + self.assertEqual(child_b.parent, parent) + + # Deleting the intermediate item grafts its children onto the grandparent + parent.delete() + + child_a.refresh_from_db() + child_b.refresh_from_db() + + self.assertEqual(child_a.parent, grandparent) + self.assertEqual(child_b.parent, grandparent) + + # Deleting a top-level item leaves its children with no parent + grandparent.delete() + + child_a.refresh_from_db() + child_b.refresh_from_db() + + self.assertIsNone(child_a.parent) + self.assertIsNone(child_b.parent) + + def test_implicit_delete_reparents_children(self): + """Test child re-linking when items are deleted by depletion or merging.""" + grandparent = StockItem.objects.get(id=1234) + + # An item depleted to zero with delete_on_deplete set is deleted + parent = grandparent.splitStock(200, None, self.user) + child = parent.splitStock(50, None, self.user) + + parent.delete_on_deplete = True + parent.save() + + self.assertTrue(parent.take_stock(150, self.user, notes='Deplete')) + self.assertFalse(StockItem.objects.filter(pk=parent.pk).exists()) + + child.refresh_from_db() + self.assertEqual(child.parent, grandparent) + + # An item absorbed by a merge is also deleted + source = grandparent.splitStock(100, None, self.user) + kid = source.splitStock(25, None, self.user) + + target = StockItem.objects.create( + part=grandparent.part, + supplier_part=grandparent.supplier_part, + quantity=10, + location=grandparent.location, + ) + + target.merge_stock_items([source], raise_error=True, user=self.user) + + self.assertFalse(StockItem.objects.filter(pk=source.pk).exists()) + + kid.refresh_from_db() + self.assertEqual(kid.parent, grandparent) + + def test_over_adjustment_quantities(self): + """Stock adjustments are clamped to the available stock quantity. + + Regression test: take_stock / allocateToCustomer / installStockItem + previously recorded the *requested* quantity in the stock history, + even when less stock was actually removed / allocated / installed. + """ + part = Part.objects.create( + name='Clamp part', + description='A part for quantity clamping tests', + salable=True, + component=True, + ) + + # --- take_stock: remove more than available --- + item = StockItem.objects.create(part=part, quantity=10, delete_on_deplete=False) + + self.assertTrue(item.take_stock(25, self.user, notes='over-remove')) + + item.refresh_from_db() + self.assertEqual(item.quantity, 0) + + # History records the quantity which was *actually* removed + entry = item.tracking_info.latest('pk') + self.assertEqual(entry.deltas['removed'], 10.0) + self.assertEqual(entry.deltas['quantity'], 0.0) + + # Removing stock from an empty item fails, and adds no history + n = item.tracking_info.count() + self.assertFalse(item.take_stock(5, self.user)) + self.assertEqual(item.tracking_info.count(), n) + + # --- allocateToCustomer: allocate more than available --- + customer = Company.objects.create(name='Clamp customer', is_customer=True) + + item = StockItem.objects.create(part=part, quantity=10) + + allocated = item.allocateToCustomer(customer, quantity=25, user=self.user) + + # The whole item is allocated (no split occurs) + self.assertEqual(allocated.pk, item.pk) + self.assertEqual(allocated.customer, customer) + + # History records the quantity which was *actually* allocated + entry = allocated.tracking_info.latest('pk') + self.assertEqual(entry.deltas['quantity'], 10.0) + + # A zero quantity is rejected outright + item = StockItem.objects.create(part=part, quantity=10) + + with self.assertRaises(ValidationError): + item.allocateToCustomer(customer, quantity=0, user=self.user) + + # --- installStockItem: install more than available --- + assembly = Part.objects.create( + name='Clamp assembly', + description='An assembly for quantity clamping tests', + assembly=True, + ) + + parent_item = StockItem.objects.create(part=assembly, quantity=1) + component = StockItem.objects.create(part=part, quantity=10) + + parent_item.installStockItem(component, 25, self.user, 'over-install') + + component.refresh_from_db() + self.assertEqual(component.belongs_to, parent_item) + self.assertEqual(component.quantity, 10) + + # Both history entries record the quantity which was *actually* installed + entry = component.tracking_info.filter( + tracking_type=StockHistoryCode.INSTALLED_INTO_ASSEMBLY + ).latest('pk') + self.assertEqual(entry.deltas['quantity'], 10.0) + + entry = parent_item.tracking_info.filter( + tracking_type=StockHistoryCode.INSTALLED_CHILD_ITEM + ).latest('pk') + self.assertEqual(entry.deltas['quantity'], 10.0) + + # A zero quantity is rejected outright + other = StockItem.objects.create(part=part, quantity=5) + + with self.assertRaises(ValidationError): + parent_item.installStockItem(other, 0, self.user, 'bad install') + + def test_uninstall_into_structural_location(self): + """Test that an item cannot be uninstalled into a structural location.""" + parent = StockItem.objects.get(pk=1) + + item = StockItem.objects.get(pk=2) + item.belongs_to = parent + item.save() + + n_entries = item.tracking_info.count() + n_parent_entries = parent.tracking_info.count() + + structural = StockLocation.objects.create( + name='Structural location', structural=True + ) + + with self.assertRaises(ValidationError): + item.uninstall_into_location(structural, self.user, 'Uninstalling') + + # The item remains installed, with no location change or tracking entries + item.refresh_from_db() + self.assertEqual(item.belongs_to, parent) + self.assertNotEqual(item.location, structural) + self.assertEqual(item.tracking_info.count(), n_entries) + self.assertEqual(parent.tracking_info.count(), n_parent_entries) + + # Uninstalling into a non-structural location is still permitted + item.uninstall_into_location(self.drawer2, self.user, 'Uninstalling') + + item.refresh_from_db() + self.assertIsNone(item.belongs_to) + self.assertEqual(item.location, self.drawer2) + + def test_child_items(self): + """Test the 'children' reverse relation and 'child_count' property. + + Regression test: StockItem previously defined a 'children' property + (shadowed by the reverse FK accessor, and referencing a method which no + longer exists on the model). The property has been removed - 'children' + must resolve to the reverse foreign-key manager for the 'parent' field. + """ + part = Part.objects.create( + name='Child test part', description='A part for child item testing' + ) + + parent = StockItem.objects.create(part=part, quantity=100) + + self.assertEqual(parent.children.count(), 0) + self.assertEqual(parent.child_count, 0) + self.assertEqual(parent.get_children().count(), 0) + + # Split off two child items + child_1 = parent.splitStock(10, None, self.user) + child_2 = parent.splitStock(20, None, self.user) + + parent.refresh_from_db() + self.assertEqual(parent.quantity, 70) + + children = parent.children.all() + + self.assertEqual(children.count(), 2) + self.assertEqual(parent.child_count, 2) + self.assertIn(child_1, children) + self.assertIn(child_2, children) + + # get_children() proxies the same relation + self.assertEqual( + list(parent.get_children().order_by('pk')), list(children.order_by('pk')) + ) + + # Only *direct* children are included + grandchild = child_1.splitStock(5, None, self.user) + + self.assertEqual(parent.child_count, 2) + self.assertEqual(child_1.child_count, 1) + self.assertIn(grandchild, child_1.children.all()) + self.assertNotIn(grandchild, parent.children.all()) + + def test_adjustment_stale_quantity(self): + """Stock adjustments operate on database quantities, not stale in-memory copies. + + Simulates concurrent adjustment operations, where each worker holds + its own (stale) in-memory copy of the same StockItem. + """ + item = StockItem.objects.get(pk=1234) + self.assertEqual(item.quantity, 1234) + + # Remove stock via two independent in-memory copies + item_a = StockItem.objects.get(pk=item.pk) + item_b = StockItem.objects.get(pk=item.pk) + + self.assertTrue(item_a.take_stock(100, self.user)) + self.assertTrue(item_b.take_stock(200, self.user)) + + item.refresh_from_db() + self.assertEqual(item.quantity, 934) + + # Add stock via a stale copy + item_c = StockItem.objects.get(pk=item.pk) + item.take_stock(34, self.user) + + self.assertTrue(item_c.add_stock(100, self.user)) + + item.refresh_from_db() + self.assertEqual(item.quantity, 1000) + + # Split stock via a stale copy + item_d = StockItem.objects.get(pk=item.pk) + item.take_stock(500, self.user) + + child = item_d.splitStock(300, None, self.user) + + item.refresh_from_db() + self.assertEqual(item.quantity, 200) + self.assertEqual(child.quantity, 300) + + # A full-quantity move via a stale copy must not resurrect removed stock + item_e = StockItem.objects.get(pk=item.pk) + item.take_stock(50, self.user) + + self.assertTrue(item_e.move(self.diningroom, 'Move', self.user)) + + item.refresh_from_db() + self.assertEqual(item.quantity, 150) + self.assertEqual(item.location, self.diningroom) + + def test_merge_stale_quantity(self): + """Merging stock items uses database quantities, not stale in-memory values.""" + part = Part.objects.get(pk=3) + + target = StockItem.objects.create(part=part, quantity=100) + source = StockItem.objects.create(part=part, quantity=50) + + # Hold a stale copy of the target, and adjust the real row underneath it + stale_target = StockItem.objects.get(pk=target.pk) + target.take_stock(60, self.user) + + stale_target.merge_stock_items([source], user=self.user) + + target.refresh_from_db() + self.assertEqual(target.quantity, 90) + self.assertFalse(StockItem.objects.filter(pk=source.pk).exists()) + def test_stocktake(self): """Test stocktake function.""" # Perform stocktake @@ -386,6 +684,76 @@ class StockTest(StockTestBase): self.assertEqual(it.quantity, 100) self.assertEqual(it.status, StockStatus.DAMAGED.value) + def get_counted_events(self): + """Helper: return queued OrmQ tasks corresponding to a StockEvents.ITEM_COUNTED event. + + stocktake() also fires an ITEM_QUANTITY_UPDATED event (via updateQuantity()) and may + offload a (deduped) low-stock notification task, so tests filter down to just the + ITEM_COUNTED entries they care about, rather than asserting the raw queue total. + """ + return [ + task + for task in OrmQ.objects.all().order_by('id') + if task.args() == (StockEvents.ITEM_COUNTED,) + ] + + def test_stocktake_batch_events(self): + """Test that batch_events() collapses per-item stocktake() events into one bulk write. + + StockItem.stocktake() always calls trigger_event() exactly as it does when called + standalone (see test_stocktake_events_outside_batch below) - a bulk caller wraps its + loop in batch_events() to collapse those N individual event offloads into a single + bulk_trigger_event() call, fired when the enclosing transaction commits. + """ + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + part = Part.objects.create( + name='Batch stocktake part', description='For batch stocktake testing' + ) + + items = [ + StockItem.objects.create(part=part, location=self.home, quantity=idx + 1) + for idx in range(10) + ] + + OrmQ.objects.all().delete() + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + # All 10 ITEM_COUNTED events should be queued via a single bulk write, + # fired when the transaction commits (captured here via captureOnCommitCallbacks) + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), batch_events(): + for idx, item in enumerate(items): + item.stocktake(100 + idx, self.user, notes='Batch stocktake') + + counted_tasks = self.get_counted_events() + self.assertEqual(len(counted_tasks), 10) + + for idx, (task, item) in enumerate(zip(counted_tasks, items, strict=True)): + self.assertEqual(task.func(), 'plugin.base.event.events.register_event') + self.assertEqual(task.kwargs(), {'id': item.id, 'quantity': 100.0 + idx}) + + def test_stocktake_events_outside_batch(self): + """Test that stocktake() still fires events immediately when called outside batch_events().""" + InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None) + + item = StockItem.objects.get(pk=2) + + OrmQ.objects.all().delete() + + with self.settings( + PLUGIN_TESTING_EVENTS=True, PLUGIN_TESTING_EVENTS_ASYNC=True + ): + item.stocktake(42, self.user, notes='Single stocktake') + + # No batch_events() context was active, so the event was queued immediately - + # no transaction commit or captureOnCommitCallbacks is required to see it + counted_tasks = self.get_counted_events() + self.assertEqual(len(counted_tasks), 1) + self.assertEqual(counted_tasks[0].kwargs(), {'id': item.id, 'quantity': 42.0}) + def test_add_stock(self): """Test adding stock.""" it = StockItem.objects.get(pk=2) @@ -771,6 +1139,54 @@ class StockTest(StockTestBase): # Final purchase price should be the weighted average self.assertAlmostEqual(s1.purchase_price.amount, 16.875, places=3) + def test_merge_protected_items(self): + """Stock items in a protected state cannot be absorbed by a merge. + + Regression test: merge_stock_items() used to run the generic state checks + (in production, assigned to customer, etc.) against the *target* item only, + allowing e.g. a build output to be merged away and deleted. + """ + part = Part.objects.first() + part.stock_items.all().delete() + + target = StockItem.objects.create(part=part, quantity=10) + + # The incoming item is "in production" (a build output) + part.assembly = True + part.save() + + bo = Build.objects.create( + reference='BO-9998', part=part, title='Merge test build', quantity=20 + ) + + building = StockItem.objects.create( + part=part, quantity=20, build=bo, is_building=True + ) + + # Without raise_error, the merge is refused silently + target.merge_stock_items([building]) + + target.refresh_from_db() + building.refresh_from_db() + + self.assertEqual(part.stock_items.count(), 2) + self.assertEqual(target.quantity, 10) + self.assertEqual(building.quantity, 20) + + # With raise_error, the merge raises a ValidationError + with self.assertRaises(ValidationError): + target.merge_stock_items([building], raise_error=True) + + # An item assigned to a customer is likewise protected + customer = Company.objects.create(name='MergeCust', is_customer=True) + assigned = StockItem.objects.create(part=part, quantity=5, customer=customer) + + target.merge_stock_items([assigned]) + + target.refresh_from_db() + self.assertEqual(target.quantity, 10) + self.assertTrue(StockItem.objects.filter(pk=assigned.pk).exists()) + def test_notify_low_stock(self): """Test that the 'notify_low_stock' task is triggered correctly.""" FUNC_NAME = 'part.tasks.notify_low_stock_if_required' @@ -832,6 +1248,130 @@ class StockTest(StockTestBase): self.assertEqual(item.purchase_price_currency, 'GBP') +class TrackingEntryBatchTests(StockTestBase): + """Unit tests for the batch_tracking_entries() context manager.""" + + def test_entries_queued_and_flushed_on_commit(self): + """Tracking entries created inside batch_tracking_entries() are bulk-created on commit.""" + item = StockItem.objects.get(pk=2) + + n = StockItemTracking.objects.count() + + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), batch_tracking_entries(): + for idx in range(10): + item.add_tracking_entry( + StockHistoryCode.STOCK_COUNT, + self.user, + deltas={'quantity': idx}, + notes=f'Batch entry {idx}', + ) + + # Nothing should be written yet - the batch only flushes on commit + self.assertEqual(StockItemTracking.objects.count(), n) + + entries = StockItemTracking.objects.filter(item=item).order_by('id')[:10] + self.assertEqual(StockItemTracking.objects.count(), n + 10) + + for idx, entry in enumerate(entries): + self.assertEqual(entry.tracking_type, StockHistoryCode.STOCK_COUNT) + self.assertEqual(entry.deltas.get('quantity'), idx) + self.assertEqual(entry.notes, f'Batch entry {idx}') + + def test_entries_discarded_on_rollback(self): + """Tracking entries queued in a batch are discarded if the transaction rolls back.""" + item = StockItem.objects.get(pk=2) + + n = StockItemTracking.objects.count() + + with self.captureOnCommitCallbacks(execute=True): + try: + with transaction.atomic(), batch_tracking_entries(): + item.add_tracking_entry( + StockHistoryCode.STOCK_COUNT, self.user, deltas={'quantity': 1} + ) + raise ValueError('boom') + except ValueError: + pass + + self.assertEqual(StockItemTracking.objects.count(), n) + + def test_entries_outside_batch_fire_immediately(self): + """Tracking entries created outside any batch are unaffected - saved immediately.""" + item = StockItem.objects.get(pk=2) + + n = StockItemTracking.objects.count() + + item.add_tracking_entry( + StockHistoryCode.STOCK_COUNT, self.user, deltas={'quantity': 1} + ) + + # No transaction commit or captureOnCommitCallbacks needed - it was never queued + self.assertEqual(StockItemTracking.objects.count(), n + 1) + + def test_nested_batch_share_one_flush(self): + """A nested batch_tracking_entries() call reuses the outer batch, rather than flushing twice.""" + item = StockItem.objects.get(pk=2) + + n = StockItemTracking.objects.count() + + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), batch_tracking_entries(): + item.add_tracking_entry( + StockHistoryCode.STOCK_COUNT, self.user, deltas={'quantity': 1} + ) + with batch_tracking_entries(): + item.add_tracking_entry( + StockHistoryCode.STOCK_COUNT, self.user, deltas={'quantity': 2} + ) + self.assertEqual(StockItemTracking.objects.count(), n) + + self.assertEqual(StockItemTracking.objects.count(), n + 2) + + def test_commit_false_is_unaffected_by_batch(self): + """commit=False callers keep manual ownership of the entry, even inside a batch.""" + item = StockItem.objects.get(pk=2) + + n = StockItemTracking.objects.count() + + with transaction.atomic(), batch_tracking_entries(): + entry = item.add_tracking_entry( + StockHistoryCode.STOCK_COUNT, + self.user, + deltas={'quantity': 1}, + commit=False, + ) + + # The entry was returned uncommitted - the batch never saw it, so it was never written + self.assertIsNotNone(entry) + self.assertIsNone(entry.pk) + self.assertEqual(StockItemTracking.objects.count(), n) + + def test_stocktake_batch_tracking_entries(self): + """Integration test: batching stocktake() tracking entries via the StockCountSerializer path.""" + part = Part.objects.create( + name='Batch tracking part', description='For batch tracking testing' + ) + + items = [ + StockItem.objects.create(part=part, location=self.home, quantity=idx + 1) + for idx in range(10) + ] + + n = StockItemTracking.objects.count() + + with self.captureOnCommitCallbacks(execute=True): + with transaction.atomic(), batch_tracking_entries(): + for idx, item in enumerate(items): + item.stocktake(100 + idx, self.user, notes='Batch stocktake') + + entries = StockItemTracking.objects.filter( + item__in=items, tracking_type=StockHistoryCode.STOCK_COUNT + ).order_by('id') + self.assertEqual(entries.count(), 10) + self.assertEqual(StockItemTracking.objects.count(), n + 10) + + class StockBarcodeTest(StockTestBase): """Run barcode tests for the stock app.""" @@ -939,7 +1479,6 @@ class VariantTest(StockTestBase): # Attempt to create the same serial number but for a variant (should fail!) # Reset the primary key and tree_id values item.pk = None - item.tree_id = None item.part = Part.objects.get(pk=10004) with self.assertRaises(ValidationError): @@ -1154,187 +1693,6 @@ class StockLocationTreeTest(StockTestBase): self.assertEqual(C22.get_ancestors().count(), 1) -class StockTreeTest(StockTestBase): - """Unit test for StockItem tree structure.""" - - def test_stock_split(self): - """Test that stock splitting works correctly.""" - part = Part.objects.create(name='My part', description='My part description') - location = StockLocation.objects.create(name='Test Location') - - # Create an initial stock item - item = StockItem.objects.create(part=part, quantity=1000, location=location) - - # Test that the initial MPTT values are correct - self.assertEqual(item.level, 0) - self.assertEqual(item.lft, 1) - self.assertEqual(item.rght, 2) - - children = [] - - self.assertEqual(item.get_descendants(include_self=False).count(), 0) - self.assertEqual(item.get_descendants(include_self=True).count(), 1) - - # Create child items by splitting stock - for idx in range(10): - child = item.splitStock(50, None, None) - children.append(child) - - # Check that the child item has been correctly created - self.assertEqual(child.parent.pk, item.pk) - self.assertEqual(child.tree_id, item.tree_id) - self.assertEqual(child.level, 1) - - item.refresh_from_db() - self.assertEqual(item.get_children().count(), idx + 1) - self.assertEqual(item.get_descendants(include_self=True).count(), idx + 2) - - item.refresh_from_db() - n = item.get_descendants(include_self=True).count() - - for child in children: - # Create multiple sub-childs - for _idx in range(3): - sub_child = child.splitStock(10, None, None) - self.assertEqual(sub_child.parent.pk, child.pk) - self.assertEqual(sub_child.tree_id, child.tree_id) - self.assertEqual(sub_child.level, 2) - - self.assertEqual(sub_child.get_ancestors(include_self=True).count(), 3) - - child.refresh_from_db() - self.assertEqual(child.get_descendants(include_self=True).count(), 4) - - item.refresh_from_db() - self.assertEqual(item.get_descendants(include_self=True).count(), n + 30) - - def test_tree_rebuild(self): - """Test that tree rebuild works correctly.""" - part = Part.objects.create(name='My part', description='My part description') - location = StockLocation.objects.create(name='Test Location') - - N = StockItem.objects.count() - - # Create an initial stock item - item = StockItem.objects.create(part=part, quantity=1000, location=location) - - # Split out ten child items - for _idx in range(10): - item.splitStock(10) - - item.refresh_from_db() - - self.assertEqual(StockItem.objects.count(), N + 11) - self.assertEqual(item.get_children().count(), 10) - self.assertEqual(item.get_descendants(include_self=True).count(), 11) - - # Split the first child item - child = item.get_children().first() - - self.assertEqual(child.parent, item) - self.assertEqual(child.tree_id, item.tree_id) - self.assertEqual(child.level, 1) - - # Split out three grandchildren - for _ in range(3): - child.splitStock(2) - - item.refresh_from_db() - child.refresh_from_db() - - self.assertEqual(child.get_descendants(include_self=True).count(), 4) - self.assertEqual(child.get_children().count(), 3) - - # Check tree structure for grandchildren - grandchildren = child.get_children() - - for gc in grandchildren: - self.assertEqual(gc.parent, child) - self.assertEqual(gc.parent.parent, item) - self.assertEqual(gc.tree_id, item.tree_id) - self.assertEqual(gc.level, 2) - self.assertGreater(gc.lft, child.lft) - self.assertLess(gc.rght, child.rght) - - self.assertEqual(item.get_children().count(), 10) - self.assertEqual(item.get_descendants(include_self=True).count(), 14) - - # Now, delete the child node - # We expect that the grandchildren will be re-parented to the parent node - child.delete() - - for gc in grandchildren: - gc.refresh_from_db() - - # Check that the grandchildren have been re-parented to the top-level - self.assertEqual(gc.parent, item) - self.assertEqual(gc.tree_id, item.tree_id) - self.assertEqual(gc.level, 1) - self.assertGreater(gc.lft, item.lft) - self.assertLess(gc.rght, item.rght) - - item.refresh_from_db() - - self.assertEqual(item.get_children().count(), 12) - self.assertEqual(item.get_descendants(include_self=True).count(), 13) - - def test_serialize(self): - """Test that StockItem serialization maintains tree structure.""" - part = Part.objects.create( - name='My part', description='My part description', trackable=True - ) - - N = StockItem.objects.count() - - # Create an initial stock item - item_1 = StockItem.objects.create(part=part, quantity=1000) - item_2 = item_1.splitStock(750) - - item_1.refresh_from_db() - - self.assertEqual(StockItem.objects.count(), N + 2) - self.assertEqual(item_1.get_children().count(), 1) - self.assertEqual(item_2.parent, item_1) - - loc = StockLocation.objects.filter(structural=False).first() - - # Serialize the secondary item - serials = [str(i) for i in range(20)] - items = item_2.serializeStock(20, serials, location=loc) - - self.assertEqual(len(items), 20) - self.assertEqual(StockItem.objects.count(), N + 22) - - item_1.refresh_from_db() - item_2.refresh_from_db() - - self.assertEqual(item_1.get_children().count(), 1) - self.assertEqual(item_2.get_children().count(), 20) - - for child in items: - self.assertEqual(child.tree_id, item_2.tree_id) - self.assertEqual(child.level, 2) - self.assertEqual(child.parent, item_2) - self.assertGreater(child.lft, item_2.lft) - self.assertLess(child.rght, item_2.rght) - self.assertEqual(child.location, loc) - self.assertIsNotNone(child.location) - self.assertEqual(child.tracking_info.count(), 2) - - # Delete item_2 : we expect that all children will be re-parented to item_1 - item_2.delete() - - for child in items: - child.refresh_from_db() - - # Check that the children have been re-parented to item_1 - self.assertEqual(child.parent, item_1) - self.assertEqual(child.tree_id, item_1.tree_id) - self.assertEqual(child.level, 1) - self.assertGreater(child.lft, item_1.lft) - self.assertLess(child.rght, item_1.rght) - - class TestResultTest(StockTestBase): """Tests for the StockItemTestResult model.""" diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index 13ef2fa501..1c37e8f52d 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -248,6 +248,24 @@ class MeUserDetail(RetrieveUpdateAPI, UserDetail): """ return None + @extend_schema( + parameters=[ + OpenApiParameter( + name='roles', + type=bool, + location=OpenApiParameter.QUERY, + description='Include the roles and permissions associated with the current user in the response', + ) + ] + ) + def get(self, request, *args, **kwargs): + """Retrieve details for the current user. + + Pass '?roles=true' to also include the user's roles and permissions + (previously only available via the separate '/user/me/roles/' endpoint). + """ + return super().get(request, *args, **kwargs) + class UserList(ListCreateAPI): """List endpoint for detail on all users. diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index 417a863ae3..6b13f4577c 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -78,37 +78,47 @@ class RoleSerializer(InvenTreeModelSerializer): def get_roles(self, user: User) -> dict: """Roles associated with the user.""" - roles = {} - - # Cache the 'groups' queryset for the user - groups = prefetch_rule_sets(user) - - for ruleset in RULESET_CHOICES: - role, _text = ruleset - - permissions = [] - - for permission in RULESET_PERMISSIONS: - if check_user_role(user, role, permission, groups=groups): - permissions.append(permission) - - if len(permissions) > 0: - roles[role] = permissions - else: - roles[role] = None # pragma: no cover - - return roles + return get_user_roles(user) def get_permissions(self, user: User) -> dict: """Permissions associated with the user.""" - if user.is_superuser: - permissions = Permission.objects.all() - else: - permissions = Permission.objects.filter( - Q(user=user) | Q(group__user=user) - ).distinct() + return get_user_permissions(user) - return generate_permission_dict(permissions) + +def get_user_roles(user: User) -> dict: + """Return a dict of the roles associated with the given user.""" + roles = {} + + # Cache the 'groups' queryset for the user + groups = prefetch_rule_sets(user) + + for ruleset in RULESET_CHOICES: + role, _text = ruleset + + permissions = [] + + for permission in RULESET_PERMISSIONS: + if check_user_role(user, role, permission, groups=groups): + permissions.append(permission) + + if len(permissions) > 0: + roles[role] = permissions + else: + roles[role] = None # pragma: no cover + + return roles + + +def get_user_permissions(user: User) -> dict: + """Return a dict of the permissions associated with the given user.""" + if user.is_superuser: + permissions = Permission.objects.all() + else: + permissions = Permission.objects.filter( + Q(user=user) | Q(group__user=user) + ).distinct() + + return generate_permission_dict(permissions) def generate_permission_dict(permissions) -> dict: @@ -390,7 +400,7 @@ class UserSetPasswordSerializer(serializers.Serializer): ) -class MeUserSerializer(ExtendedUserSerializer): +class MeUserSerializer(FilterableSerializerMixin, ExtendedUserSerializer): """API serializer specifically for the 'me' endpoint.""" class Meta(ExtendedUserSerializer.Meta): @@ -401,7 +411,11 @@ class MeUserSerializer(ExtendedUserSerializer): """ # Remove the 'group_ids' field, as this is not relevant for the 'me' endpoint - fields = [f for f in ExtendedUserSerializer.Meta.fields if f != 'group_ids'] + fields = [ + *(f for f in ExtendedUserSerializer.Meta.fields if f != 'group_ids'), + 'roles', + 'permissions', + ] read_only_fields = [ *ExtendedUserSerializer.Meta.read_only_fields, @@ -412,6 +426,31 @@ class MeUserSerializer(ExtendedUserSerializer): profile = UserProfileSerializer(many=False, read_only=True) + # Roles and permissions are only computed (and included) when the + # request explicitly asks for them via '?roles=true' - they require + # extra queries, and most callers of this endpoint only want basic + # user details. Shares a filter_name so both come back together, since + # they were previously served as a single '/user/me/roles/' response. + roles = OptionalField( + serializer_class=serializers.SerializerMethodField, + serializer_kwargs={'read_only': True}, + filter_name='roles', + ) + + permissions = OptionalField( + serializer_class=serializers.SerializerMethodField, + serializer_kwargs={'allow_null': True, 'read_only': True}, + filter_name='roles', + ) + + def get_roles(self, user: User) -> dict: + """Roles associated with the user.""" + return get_user_roles(user) + + def get_permissions(self, user: User) -> dict: + """Permissions associated with the user.""" + return get_user_permissions(user) + # Redefine the fields from ExtendedUserSerializer, to ensure they are marked as read-only is_staff = serializers.BooleanField( label=_('Staff'), diff --git a/src/frontend/lib/components/RowActions.tsx b/src/frontend/lib/components/RowActions.tsx index ff2ad44c40..89d57d3109 100644 --- a/src/frontend/lib/components/RowActions.tsx +++ b/src/frontend/lib/components/RowActions.tsx @@ -10,7 +10,7 @@ import { } from '@tabler/icons-react'; import { type ReactNode, useMemo, useState } from 'react'; import { cancelEvent } from '../functions/Events'; -import { getDetailUrl } from '../functions/Navigation'; +import { eventModified, getDetailUrl } from '../functions/Navigation'; import { navigateToLink } from '../functions/Navigation'; import type { RowAction, RowViewProps } from '../types/Tables'; @@ -23,8 +23,18 @@ export function RowViewAction(props: RowViewProps): RowAction { color: undefined, icon: , onClick: (event: any) => { - const url = getDetailUrl(props.modelType, props.modelId); - navigateToLink(url, props.navigate, event); + const showPreviewPanel = props.isPreviewEnabled?.() ?? false; + + if ( + !showPreviewPanel || + eventModified(event as any) || + !props.openPreview + ) { + const url = getDetailUrl(props.modelType, props.modelId); + navigateToLink(url, props.navigate, event); + } else { + props.openPreview(props.modelType, props.modelId); + } } }; } diff --git a/src/frontend/lib/enums/ApiEndpoints.tsx b/src/frontend/lib/enums/ApiEndpoints.tsx index d4bdf620cc..63546cf8d5 100644 --- a/src/frontend/lib/enums/ApiEndpoints.tsx +++ b/src/frontend/lib/enums/ApiEndpoints.tsx @@ -155,6 +155,7 @@ export enum ApiEndpoints { stock_assign = 'stock/assign/', stock_status = 'stock/status/', stock_convert = 'stock/:id/convert/', + stock_disassemble = 'stock/:id/disassemble/', stock_install = 'stock/:id/install/', stock_uninstall = 'stock/:id/uninstall/', stock_serialize = 'stock/:id/serialize/', diff --git a/src/frontend/lib/enums/ModelInformation.tsx b/src/frontend/lib/enums/ModelInformation.tsx index bc78575259..cdb6e6692b 100644 --- a/src/frontend/lib/enums/ModelInformation.tsx +++ b/src/frontend/lib/enums/ModelInformation.tsx @@ -1,5 +1,6 @@ import { t } from '@lingui/core/macro'; import type { InvenTreeIconType } from '../types/Icons'; +import type { InstanceRenderInterface } from '../types/Rendering'; import { ApiEndpoints } from './ApiEndpoints'; import type { ModelType } from './ModelType'; @@ -13,6 +14,9 @@ export interface ModelInformationInterface { pk_field?: string; supports_barcode?: boolean; icon: keyof InvenTreeIconType; + preview?: (props: { instance: any; modelId: number }) => any; + render?: (props: Readonly) => any; + default_query_params?: Record; } export interface TranslatableModelInformationInterface @@ -25,6 +29,33 @@ export type ModelDict = { [key in keyof typeof ModelType]: TranslatableModelInformationInterface; }; +type ModelPreviewKey = keyof typeof ModelType; +type ModelPreviewProps = { instance: any; modelId: number }; +type ModelPreview = (props: ModelPreviewProps) => any; +type ModelRender = (props: Readonly) => any; + +export function registerModelPreviews( + previews: Partial> +) { + (Object.keys(previews) as ModelPreviewKey[]).forEach((model) => { + const preview = previews[model]; + if (preview) { + ModelInformationDict[model].preview = preview; + } + }); +} + +export function registerModelRenderers( + renderers: Partial> +) { + (Object.keys(renderers) as ModelPreviewKey[]).forEach((model) => { + const renderer = renderers[model]; + if (renderer) { + ModelInformationDict[model].render = renderer; + } + }); +} + export const ModelInformationDict: ModelDict = { part: { label: () => t`Part`, @@ -64,7 +95,12 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.supplier_part_list, admin_url: '/company/supplierpart/', supports_barcode: true, - icon: 'supplier_part' + icon: 'supplier_part', + default_query_params: { + part_detail: true, + supplier_detail: true, + manufacturer_detail: true + } }, manufacturerpart: { label: () => t`Manufacturer Part`, @@ -74,7 +110,8 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.manufacturer_part_list, admin_url: '/company/manufacturerpart/', supports_barcode: true, - icon: 'manufacturers' + icon: 'manufacturers', + default_query_params: { part_detail: true, manufacturer_detail: true } }, partcategory: { label: () => t`Part Category`, @@ -93,7 +130,8 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.stock_item_list, admin_url: '/stock/stockitem/', supports_barcode: true, - icon: 'stock' + icon: 'stock', + default_query_params: { part_detail: true } }, stocklocation: { label: () => t`Stock Location`, @@ -125,7 +163,8 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.build_order_list, admin_url: '/build/build/', supports_barcode: true, - icon: 'build_order' + icon: 'build_order', + default_query_params: { part_detail: true } }, buildline: { label: () => t`Build Line`, @@ -164,7 +203,8 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.purchase_order_list, admin_url: '/order/purchaseorder/', supports_barcode: true, - icon: 'purchase_orders' + icon: 'purchase_orders', + default_query_params: { supplier_detail: true } }, purchaseorderlineitem: { label: () => t`Purchase Order Line`, @@ -180,7 +220,8 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.sales_order_list, admin_url: '/order/salesorder/', supports_barcode: true, - icon: 'sales_orders' + icon: 'sales_orders', + default_query_params: { customer_detail: true } }, salesordershipment: { label: () => t`Sales Order Shipment`, @@ -190,7 +231,8 @@ export const ModelInformationDict: ModelDict = { admin_url: '/order/salesordershipment/', api_endpoint: ApiEndpoints.sales_order_shipment_list, supports_barcode: true, - icon: 'shipment' + icon: 'shipment', + default_query_params: { order_detail: true } }, returnorder: { label: () => t`Return Order`, @@ -200,7 +242,8 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.return_order_list, admin_url: '/order/returnorder/', supports_barcode: true, - icon: 'return_orders' + icon: 'return_orders', + default_query_params: { customer_detail: true } }, returnorderlineitem: { label: () => t`Return Order Line Item`, diff --git a/src/frontend/lib/functions/Events.tsx b/src/frontend/lib/functions/Events.tsx index 115e8939a8..9374131965 100644 --- a/src/frontend/lib/functions/Events.tsx +++ b/src/frontend/lib/functions/Events.tsx @@ -17,7 +17,10 @@ export type InvenTreeHotkeyItem = [ HotkeyItemOptions? ]; -export function useInvenTreeHotkeys(_keys: InvenTreeHotkeyItem[]) { +export function useInvenTreeHotkeys( + _keys: InvenTreeHotkeyItem[], + tagsToIgnore?: string[] +) { const keyelems: [string, string][] = _keys.map(([key, description]) => [ key, description @@ -29,7 +32,7 @@ export function useInvenTreeHotkeys(_keys: InvenTreeHotkeyItem[]) { HotkeyItemOptions? ][] = _keys.map(([key, _, handler, options]) => [key, handler, options]); // Register the hotkeys using the Mantine hook - useHotkeys(mappedHotkeys); + useHotkeys(mappedHotkeys, tagsToIgnore); // register to helper state to store hotkeys // This allows us to display the hotkeys in the UI diff --git a/src/frontend/lib/types/Plugins.tsx b/src/frontend/lib/types/Plugins.tsx index 2038b1f297..d142500ae5 100644 --- a/src/frontend/lib/types/Plugins.tsx +++ b/src/frontend/lib/types/Plugins.tsx @@ -69,6 +69,17 @@ export type ImporterDrawerContext = { sessionId: () => number | null; }; +export type PreviewDrawerContext = { + open: ( + modelType: ModelType, + id?: number, + instance?: any, + onClose?: () => void + ) => void; + close: () => void; + isOpen: () => boolean; +}; + /** * A set of properties which are passed to a plugin, * for rendering an element in the user interface. @@ -90,6 +101,7 @@ export type ImporterDrawerContext = { * @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 preview - A set of functions for controlling the global preview drawer (see ../components/previews/GlobalPreviewDrawer.tsx) * @param model - The model type associated with the rendered component (if applicable) * @param id - The ID (primary key) of the model instance for the plugin (if applicable) * @param instance - The model instance data (if available) @@ -125,6 +137,7 @@ export type InvenTreePluginContext = { }; tables: InvenTreeTablesContext; importer: ImporterDrawerContext; + preview: PreviewDrawerContext; model?: ModelType | string; id?: string | number | null; instance?: any; diff --git a/src/frontend/lib/types/Preview.tsx b/src/frontend/lib/types/Preview.tsx new file mode 100644 index 0000000000..963598afe3 --- /dev/null +++ b/src/frontend/lib/types/Preview.tsx @@ -0,0 +1,12 @@ +import type { ReactNode } from 'react'; + +export interface PreviewType { + preview: ReactNode; + title: string; +} + +export type PreviewComponentProps = { + instance: any; +}; + +export type PreviewComponent = (props: PreviewComponentProps) => PreviewType; diff --git a/src/frontend/lib/types/Tables.tsx b/src/frontend/lib/types/Tables.tsx index b3b4e9f0b4..44bb08cda2 100644 --- a/src/frontend/lib/types/Tables.tsx +++ b/src/frontend/lib/types/Tables.tsx @@ -154,7 +154,12 @@ type RowModelProps = { navigate: NavigateFunction; }; -export type RowViewProps = RowAction & RowModelProps; +type RowViewBehaviorProps = { + isPreviewEnabled?: () => boolean; + openPreview?: (modelType: ModelType, modelId: number) => void; +}; + +export type RowViewProps = RowAction & RowModelProps & RowViewBehaviorProps; /** * Set of optional properties which can be passed to an InvenTreeTable component diff --git a/src/frontend/package.json b/src/frontend/package.json index 253512b80e..cb3246667a 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -127,7 +127,7 @@ "@lingui/cli": "^5.9.5", "@lingui/macro": "^5.9.5", "@playwright/test": "^1.60.0", - "@types/node": "^25.9.2", + "@types/node": "^26.0.1", "@types/qrcode": "^1.5.6", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", diff --git a/src/frontend/src/components/buttons/RemoveRowButton.tsx b/src/frontend/src/components/buttons/RemoveRowButton.tsx index c0b549e969..817217c61d 100644 --- a/src/frontend/src/components/buttons/RemoveRowButton.tsx +++ b/src/frontend/src/components/buttons/RemoveRowButton.tsx @@ -6,16 +6,19 @@ import { InvenTreeIcon } from '../../functions/icons'; export default function RemoveRowButton({ onClick, + disabled, tooltip = t`Remove this row`, tooltipAlignment }: Readonly<{ onClick: () => void; + disabled?: boolean; tooltip?: string; tooltipAlignment?: FloatingPosition; }>) { return ( } tooltip={tooltip} tooltipAlignment={tooltipAlignment ?? 'top-end'} diff --git a/src/frontend/src/components/buttons/ScanButton.tsx b/src/frontend/src/components/buttons/ScanButton.tsx index b3acfba5f7..220345e8b3 100644 --- a/src/frontend/src/components/buttons/ScanButton.tsx +++ b/src/frontend/src/components/buttons/ScanButton.tsx @@ -4,11 +4,19 @@ import { t } from '@lingui/core/macro'; import { ActionIcon, Tooltip } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { IconQrcode } from '@tabler/icons-react'; -import BarcodeScanDialog, { - type BarcodeScanCallback, - type BarcodeScanSuccessCallback +import { Suspense, lazy, useState } from 'react'; +import type { + BarcodeScanCallback, + BarcodeScanSuccessCallback } from '../barcodes/BarcodeScanDialog'; +// Lazy loaded: ScanButton is rendered unconditionally in the nav Header (and +// elsewhere), but the scan dialog itself is only ever needed once a user +// actually opens it - deferring the import until first open (rather than +// just lazy-loading the component, which would still fetch it on every +// render) avoids pulling its dependency tree into every page load. +const BarcodeScanDialog = lazy(() => import('../barcodes/BarcodeScanDialog')); + /** * A button which opens the QR code scanner modal */ @@ -24,6 +32,12 @@ export function ScanButton({ hotkey?: boolean; }) { const [opened, { open, close }] = useDisclosure(false); + const [everOpened, setEverOpened] = useState(false); + + function handleOpen() { + setEverOpened(true); + open(); + } if (hotkey) { useInvenTreeHotkeys([ @@ -31,7 +45,7 @@ export function ScanButton({ 'mod+Shift+B', t`Open barcode scanner`, () => { - open(); + handleOpen(); } ] ]); @@ -42,19 +56,23 @@ export function ScanButton({ - + {everOpened && ( + + + + )} ); } diff --git a/src/frontend/src/components/calendar/Calendar.tsx b/src/frontend/src/components/calendar/Calendar.tsx index 0a4dd18096..62f0f6c890 100644 --- a/src/frontend/src/components/calendar/Calendar.tsx +++ b/src/frontend/src/components/calendar/Calendar.tsx @@ -52,7 +52,7 @@ import { import type { CalendarState } from '../../hooks/UseCalendar'; import { useLocalState } from '../../states/LocalState'; import { useGlobalSettingsState } from '../../states/SettingsStates'; -import { FilterSelectDrawer } from '../../tables/FilterSelectDrawer'; +import { FilterSelectDrawer } from '../tables/FilterSelectDrawer'; export interface InvenTreeCalendarProps extends CalendarOptions { enableDownload?: boolean; diff --git a/src/frontend/src/components/calendar/OrderCalendar.tsx b/src/frontend/src/components/calendar/OrderCalendar.tsx index e9c65e7e56..247f3fe53a 100644 --- a/src/frontend/src/components/calendar/OrderCalendar.tsx +++ b/src/frontend/src/components/calendar/OrderCalendar.tsx @@ -7,7 +7,11 @@ import { ModelInformationDict } from '@lib/enums/ModelInformation'; import type { ModelType } from '@lib/enums/ModelType'; import type { UserRoles } from '@lib/enums/Roles'; import { apiUrl } from '@lib/functions/Api'; -import { getDetailUrl, navigateToLink } from '@lib/functions/Navigation'; +import { + eventModified, + getDetailUrl, + navigateToLink +} from '@lib/functions/Navigation'; import type { TableFilter } from '@lib/types/Filters'; import { t } from '@lingui/core/macro'; import { ActionIcon, Group, Text } from '@mantine/core'; @@ -22,15 +26,17 @@ import { useCallback, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; import { api } from '../../App'; import useCalendar from '../../hooks/UseCalendar'; +import { openGlobalPreview } from '../../states/PreviewDrawerState'; +import { useUserSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; +import { StatusRenderer, getStatusColor } from '../render/StatusRenderer'; import { AssignedToMeFilter, HasProjectCodeFilter, OrderStatusFilter, ProjectCodeFilter, ResponsibleFilter -} from '../../tables/Filter'; -import { StatusRenderer, getStatusColor } from '../render/StatusRenderer'; +} from '../tables/Filter'; import Calendar from './Calendar'; /** @@ -59,6 +65,9 @@ export default function OrderCalendar({ }) { const navigate = useNavigate(); const user = useUserState(); + const previewPanelEnabled = useUserSettingsState((state) => + state.isSet('ENABLE_PREVIEW_PANEL') + ); // These filters apply to all order types const orderFilters: TableFilter[] = useMemo(() => { @@ -166,14 +175,16 @@ export default function OrderCalendar({ } }; - // Callback when PurchaseOrder is clicked + // Callback when an order is clicked - open preview drawer, or navigate on modifier click const onClickOrder = (info: EventClickArg) => { - if (!!info.event.id) { - navigateToLink( - getDetailUrl(model, info.event.id), - navigate, - info.jsEvent - ); + if (!info.event.id) return; + + const detailUrl = getDetailUrl(model, info.event.id); + + if (eventModified(info.jsEvent as any) || !previewPanelEnabled) { + navigateToLink(detailUrl, navigate, info.jsEvent); + } else { + openGlobalPreview(model, Number.parseInt(info.event.id)); } }; diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index d221ea543d..5bc219285a 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -280,7 +280,7 @@ function NumberValue(props: Readonly) { const value = props?.field_value; // Convert to double - const numberValue = Number.parseFloat(value.toString()); + const numberValue = Number.parseFloat(value?.toString() ?? ''); if (value === null || value === undefined) { return '---'; @@ -465,10 +465,12 @@ function CopyField({ value }: Readonly<{ value: string }>) { export function DetailsTableField({ item, - field + field, + showIcons = true }: Readonly<{ item: any; field: DetailsField; + showIcons?: boolean; }>) { function getFieldType(type: string) { switch (type) { @@ -502,10 +504,12 @@ export function DetailsTableField({ - - {field.label} + {showIcons && ( + + )} + {field.label} ) { + showIcons?: boolean; +} + +export function DetailsTable({ + item, + fields, + title, + showIcons = true +}: Readonly) { const visibleFields = useMemo(() => { return fields.filter((field) => !field.hidden); }, [fields]); @@ -552,8 +560,13 @@ export function DetailsTable({ {title && {title}} - {visibleFields.map((field: DetailsField, index: number) => ( - + {visibleFields.map((field: DetailsField) => ( + ))}
diff --git a/src/frontend/src/components/details/DetailsImage.tsx b/src/frontend/src/components/details/DetailsImage.tsx index 9941ee87de..5c13e9c2bf 100644 --- a/src/frontend/src/components/details/DetailsImage.tsx +++ b/src/frontend/src/components/details/DetailsImage.tsx @@ -406,6 +406,10 @@ export function DetailsImage(props: Readonly) { const { hovered, ref } = useHover(); const [img, setImg] = useState(props.src ?? backup_image); + useEffect(() => { + setImg(props.src ?? backup_image); + }, [props.src]); + // Sets a new image, and triggers upstream instance refresh const setAndRefresh = (image: string) => { setImg(image); diff --git a/src/frontend/src/components/details/ItemDetails.tsx b/src/frontend/src/components/details/ItemDetails.tsx index 1d0b79d7da..c429ee1f0f 100644 --- a/src/frontend/src/components/details/ItemDetails.tsx +++ b/src/frontend/src/components/details/ItemDetails.tsx @@ -1,7 +1,20 @@ import { Paper, SimpleGrid } from '@mantine/core'; import type React from 'react'; +import { useMemo } from 'react'; + +import { DetailsTable, type DetailsTableProps } from './Details'; + +export type { DetailsTableProps }; + +export function ItemDetailsGrid({ + children, + tables +}: React.PropsWithChildren<{ tables?: DetailsTableProps[] }>) { + const visibleTables = useMemo( + () => tables?.filter((t) => t.fields.some((f) => !f.hidden)) ?? [], + [tables] + ); -export function ItemDetailsGrid(props: React.PropsWithChildren<{}>) { return ( ) { spacing='xs' verticalSpacing='xs' > - {props.children} + {children} + {visibleTables.map((props) => ( + field.name).join(',')} + {...props} + /> + ))} ); diff --git a/src/frontend/src/components/details/ParameterDetailsGrid.tsx b/src/frontend/src/components/details/ParameterDetailsGrid.tsx new file mode 100644 index 0000000000..7ed2aedabc --- /dev/null +++ b/src/frontend/src/components/details/ParameterDetailsGrid.tsx @@ -0,0 +1,54 @@ +import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; +import type { ModelType } from '@lib/enums/ModelType'; +import { apiUrl } from '@lib/functions/Api'; +import { t } from '@lingui/core/macro'; +import { useQuery } from '@tanstack/react-query'; +import { useMemo } from 'react'; +import { useApi } from '../../contexts/ApiContext'; +import type { DetailsField, DetailsTableProps } from './Details'; + +export function useParameterDetailsGrid({ + model_type, + model_id +}: Readonly<{ + model_type: ModelType; + model_id: number | string | undefined; +}>): DetailsTableProps { + const api = useApi(); + + const { data: parameters = [] } = useQuery({ + queryKey: ['parameter-details', model_type, model_id], + enabled: !!model_id && !!model_type, + queryFn: () => + api + .get(apiUrl(ApiEndpoints.parameter_list), { + params: { model_type, model_id, limit: 100 } + }) + .then((res) => res.data?.results ?? []) + }); + + const { fields, item } = useMemo(() => { + const item: Record = {}; + const fields: DetailsField[] = parameters.map((param: any) => { + const key = `param_${param.pk}`; + const value = + param.data + + (param.template_detail?.units ? ` ${param.template_detail.units}` : ''); + item[key] = value; + return { + type: 'string' as const, + name: key, + label: param.template_detail?.name ?? String(param.pk), + copy: true + }; + }); + return { fields, item }; + }, [parameters]); + + return { + title: t`Parameters`, + fields: fields, + item: item, + showIcons: false + }; +} diff --git a/src/frontend/src/components/forms/ApiForm.tsx b/src/frontend/src/components/forms/ApiForm.tsx index 86c5144ad7..8d03f9c9b8 100644 --- a/src/frontend/src/components/forms/ApiForm.tsx +++ b/src/frontend/src/components/forms/ApiForm.tsx @@ -24,6 +24,7 @@ import { useNavigate } from 'react-router-dom'; import { Boundary } from '@lib/components/Boundary'; import { isTrue } from '@lib/functions/Conversion'; +import { useInvenTreeHotkeys } from '@lib/functions/Events'; import { type NestedDict, constructFormUrl, @@ -40,6 +41,7 @@ import type { ApiFormProps } from '@lib/types/Forms'; import { useApi } from '../../contexts/ApiContext'; +import { isEquivalent } from '../../functions/comparison'; import { constructField, extractAvailableFields } from '../../functions/forms'; import { KeepFormOpenSwitch } from './KeepFormOpenSwitch'; import { ApiFormField } from './fields/ApiFormField'; @@ -121,15 +123,23 @@ export function OptionsApiForm({ } }, [opened]); + // Preserve the previous reference for any field whose constructed + // definition did not actually change, so unrelated fields don't force a + // fields-object replacement (and cascade a re-render to every field) + // whenever this recomputes for an unrelated reason (e.g. options data or + // the caller's own fields hook re-running with equivalent output) + const previousConstructedFieldsRef = useRef({}); + const formProps: ApiFormProps = useMemo(() => { const _props = { ...props }; if (!_props.fields) return _props; - _props.fields = { ..._props.fields }; + const prevFields = previousConstructedFieldsRef.current; + const nextFields: ApiFormFieldSet = {}; for (const [k, v] of Object.entries(_props.fields)) { - _props.fields[k] = constructField({ + const constructed = constructField({ field: v, definition: optionsQuery?.data?.[k] }); @@ -138,10 +148,17 @@ export function OptionsApiForm({ const value = _props?.initialData?.[k]; if (value) { - _props.fields[k].value = value; + constructed.value = value; } + + const prev = prevFields[k]; + nextFields[k] = + prev && isEquivalent(prev, constructed) ? prev : constructed; } + previousConstructedFieldsRef.current = nextFields; + _props.fields = nextFields; + return _props; }, [optionsQuery.data, props]); @@ -313,7 +330,21 @@ export function ApiForm({ } } - setFields(_fields); + // Preserve the previous reference for any field whose definition did not + // actually change, so unrelated fields don't re-render just because the + // fields hook rebuilt its entire output (e.g. in response to some other + // field's onValueChange updating local state elsewhere in that hook) + setFields((prevFields) => { + const nextFields: ApiFormFieldSet = {}; + + for (const k of Object.keys(_fields)) { + const prev = prevFields[k]; + const next = _fields[k]; + nextFields[k] = prev && isEquivalent(prev, next) ? prev : next; + } + + return nextFields; + }); }, [props.fields, props.initialData, defaultValues, initialDataQuery.data]); // Fetch initial data on form load @@ -599,6 +630,41 @@ export function ApiForm({ [props.onFormError] ); + // Submit the form when "Enter" is pressed in a field. + // Routed through a ref so that the callback identity passed down to every + // field stays stable across renders - isValid / isDirty change on every + // keystroke anywhere in the form, and a fresh onKeyDown reference here + // would force every field (not just the one being edited) to re-render. + const submitOnEnterRef = useRef<() => void>(() => {}); + submitOnEnterRef.current = () => { + if (!isLoading && (!props.fetchInitialData || isDirty)) { + form.handleSubmit(submitForm, onFormError)(); + } + }; + + const onFieldKeyDown = useCallback((value: any) => { + if (value === 'Enter') { + submitOnEnterRef.current(); + } + }, []); + + // Submit the form with Ctrl+Enter (Cmd+Enter on Mac) while it is open. + // An empty tagsToIgnore list allows the hotkey to fire from within form inputs. + useInvenTreeHotkeys( + [ + [ + 'mod+Enter', + t`Submit form`, + () => { + if (!isLoading && (!props.fetchInitialData || isDirty)) { + form.handleSubmit(submitForm, onFormError)(); + } + } + ] + ], + [] + ); + if (optionsLoading || initialDataQuery.isFetching) { return ( @@ -667,15 +733,7 @@ export function ApiForm({ url={url} navigate={navigate} setFields={setFields} - onKeyDown={(value) => { - if ( - value == 'Enter' && - !isLoading && - (!props.fetchInitialData || isDirty) - ) { - form.handleSubmit(submitForm, onFormError)(); - } - }} + onKeyDown={onFieldKeyDown} /> ); })} diff --git a/src/frontend/src/components/forms/DateTimeField.tsx b/src/frontend/src/components/forms/DateTimeField.tsx index 7c888f72af..0854f5c00c 100644 --- a/src/frontend/src/components/forms/DateTimeField.tsx +++ b/src/frontend/src/components/forms/DateTimeField.tsx @@ -3,12 +3,12 @@ import { t } from '@lingui/core/macro'; import { DateTimePicker } from '@mantine/dates'; import dayjs from 'dayjs'; import customParseFormat from 'dayjs/plugin/customParseFormat'; -import { useCallback, useId, useMemo } from 'react'; +import { memo, useCallback, useId, useMemo } from 'react'; import type { FieldValues, UseControllerReturn } from 'react-hook-form'; dayjs.extend(customParseFormat); -export default function DateTimeField({ +function DateTimeField({ controller, definition }: Readonly<{ @@ -73,3 +73,5 @@ export default function DateTimeField({ /> ); } + +export default memo(DateTimeField); diff --git a/src/frontend/src/components/forms/fields/ApiFormField.tsx b/src/frontend/src/components/forms/fields/ApiFormField.tsx index 1d76affc79..3212c3ed89 100644 --- a/src/frontend/src/components/forms/fields/ApiFormField.tsx +++ b/src/frontend/src/components/forms/fields/ApiFormField.tsx @@ -121,6 +121,15 @@ export function ApiFormField({ [fieldName, definition] ); + // Stable wrapper so the identity passed to leaf field components does not + // change unless onKeyDown itself changes (onKeyDown may be undefined) + const safeOnKeyDown = useCallback( + (value: any) => { + onKeyDown?.(value); + }, + [onKeyDown] + ); + // Construct the individual field const fieldInstance = useMemo(() => { switch (fieldDefinition.field_type) { @@ -177,9 +186,7 @@ export function ApiFormField({ controller={controller} fieldName={fieldName} onChange={onChange} - onKeyDown={(value) => { - onKeyDown?.(value); - }} + onKeyDown={safeOnKeyDown} /> ); case 'password': @@ -189,9 +196,7 @@ export function ApiFormField({ controller={controller} fieldName={fieldName} onChange={onChange} - onKeyDown={(value) => { - onKeyDown?.(value); - }} + onKeyDown={safeOnKeyDown} /> ); case 'icon': @@ -204,9 +209,7 @@ export function ApiFormField({ controller={controller} definition={reducedDefinition} fieldName={fieldName} - onChange={(value: boolean) => { - onChange(value); - }} + onChange={onChange} /> ); case 'date': @@ -231,9 +234,7 @@ export function ApiFormField({ fieldDefinition.placeholderWarningCompare ?? undefined } placeholderWarning={fieldDefinition.placeholderWarning ?? undefined} - onChange={(value: any) => { - onChange(value); - }} + onChange={onChange} /> ); case 'choice': @@ -311,7 +312,7 @@ export function ApiFormField({ fieldName, fieldDefinition, onChange, - onKeyDown, + safeOnKeyDown, reducedDefinition, ref, setFields, diff --git a/src/frontend/src/components/forms/fields/BooleanField.tsx b/src/frontend/src/components/forms/fields/BooleanField.tsx index 033e58cf30..7fc01aa065 100644 --- a/src/frontend/src/components/forms/fields/BooleanField.tsx +++ b/src/frontend/src/components/forms/fields/BooleanField.tsx @@ -2,10 +2,10 @@ import { isTrue } from '@lib/functions/Conversion'; import type { ApiFormFieldType } from '@lib/types/Forms'; import { Switch } from '@mantine/core'; import { useId } from '@mantine/hooks'; -import { useEffect, useMemo } from 'react'; +import { memo, useCallback, useEffect, useMemo } from 'react'; import type { FieldValues, UseControllerReturn } from 'react-hook-form'; -export function BooleanField({ +function BooleanFieldComponent({ controller, definition, fieldName, @@ -37,6 +37,11 @@ export function BooleanField({ return isTrue(value ?? definition.default ?? false); }, [value]); + const handleChange = useCallback( + (event: any) => onChange(event.currentTarget.checked || false), + [onChange] + ); + return ( onChange(event.currentTarget.checked || false)} + onChange={handleChange} /> ); } + +export const BooleanField = memo(BooleanFieldComponent); diff --git a/src/frontend/src/components/forms/fields/ChoiceField.tsx b/src/frontend/src/components/forms/fields/ChoiceField.tsx index 38258d2d86..e648320dce 100644 --- a/src/frontend/src/components/forms/fields/ChoiceField.tsx +++ b/src/frontend/src/components/forms/fields/ChoiceField.tsx @@ -1,13 +1,13 @@ import type { ApiFormFieldType } from '@lib/types/Forms'; import { Select } from '@mantine/core'; import { useId } from '@mantine/hooks'; -import { useCallback, useMemo, useRef } from 'react'; +import { memo, useCallback, useMemo, useRef } from 'react'; import type { FieldValues, UseControllerReturn } from 'react-hook-form'; /** * Render a 'select' field for selecting from a list of choices */ -export function ChoiceField({ +function ChoiceFieldComponent({ controller, definition, fieldName @@ -64,6 +64,8 @@ export function ChoiceField({ } }, [value]); + const onDropdownOpen = useCallback(() => inputRef?.current?.select(), []); + return (